Alokasi dan Dealokasi Memori Dinamis pada C++ - nblognlife

Alokasi dan Dealokasi Memori Dinamis pada C++

Contoh Program Alokasi dan Dealokasi Memori Dinamis pada C++

     Pada kesempatan kali ini saya akan membahas tentang alokasi dan dealokasi memori dinamis pada C++. Namun sebelum itu rasanya perlu kita untuk mengetahui bagian (segment) memori yang digunakan pada program, khususnya C++. Bagian-bagian memori tersebut diantanya :
  • Text (code) : merupakan bagian dari memori dimana kode-kode program (basic instruction) disimpan. Buka file .exe dengan notepad maka akan terlihat simbol-simbol yang merupakan bahasa mesin yang tidak dapat kita baca. Isi dari file tersebutlah yang disimpan dalam segmen memori text (code).
  • Stack : merupakan bagian memori yang digunakan untuk menyimpan variabel-varibel yang didefinisikan saat kompilasi program, jadi alamat memorinya sudah ditentukan dari awal. Stack memiliki sifat LIFO (Last In First Out), dalam hal ini artinya variabel yang disimpan terakhir akan diambil pertama.
  • Heap : Nah, bagian inilah yang akan kita gunakan untuk melakukan alokasi memori dinamis. Heap merupakan bagian memori program yang tidak terpakai dan dapat digunakan untuk melakukan alokasi memori secara dinamis saat program sedang berjalan. Heap dapat digunakan selama tersedia tempat kosong untuk pengalokasian memori dinamis. 

     Setelah mengetahui ketiga bagian/segment memori program sekarang saatnya masuk ke pembahasan utama. Sebenarnya pengalokasian memori dinamis sudah sering kita temui, terutama pada linked list dan tree. Kenapa menggunakan alokasi memori dinamis? Kadangkala kita tidak mengetahui jumlah pasti banyaknya memori yang kita butuhkan pada sebuah program. Dengan menggunakan memori dinamis kita dapat mengalokasikan memori tambahan yang kita butuhkan  ketika program sedang berjalan.

     Pada C++, untuk melakukan alokasi memori dinamis kita menggunakan keyword new, sedangkan untuk melakukan dealokasi memori dinamis kita menggunakan keyword delete. Apakah perlu suatu memori yang dialokasikan untuk didealokasikan? Ya, karena data yang disimpan pada heap tidak akan terhapus secara otomatis. Apabila dibiarkan tanpa proses dealokasi akan terjadi kesalahan memori yang disebut “memory leaks”.

Bentuk pengalokasian memori dinamis :
Yang diperlukan adalah variabel pointer dan keyword “new”. Perhatikan contoh di bawah ini!
float *bil = new float;

pernyataan di atas indentik dengan,
float *bil;
bil = new float;

*Untuk cara pemberian nilai akan langsung dicontohkan pada program

Bentuk pendealokasian memori dinamis :
Yang diperlukan adalah keyword “delete” dan nama varibel pointer yang akan didealokasikan. Perhatikan contoh di bawah ini yang digunakan untuk dealokasi memori bil.
delete bil;

Berikut adalah contoh program sederhana alokasi dan dealokasi memori dinamis pada C++:  
/*
      Alokasi dan Dealokasi Memori Dinamis pada C++
      Microsoft Visual Studio Express 2012
      [RS]
*/

#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
      //alokasi memori dinamis
      int *bil;
      bil = new int;

      *bil = 20; //bentuk pemberian nilai

      //alokasi memori dinamis
      double *phi;
      phi = new double(3.14); //bentuk pemberian nilai lain, identik dengan bentuk pemberian nilai sebelumnya

      cout<<"ALOKASI DAN DEALOKASI MEMORI DINAMIS"<<endl;
      cout<<"------------------------------------"<<endl;
      //menampilkan nilai
      cout<<"Nilai bil : "<<*bil<<endl;
      cout<<"Niali phi : "<<*phi<<endl;

      //dealokasi memori dinamis
      delete bil;
      delete phi;

      _getche();
      return 0;
}

Output
ALOKASI DAN DEALOKASI MEMORI DINAMIS
------------------------------------
Nilai bil : 20
Niali phi : 3.14


ALOKASI DAN DEALOKASI MEMORI DINAMIS ARRAY
Bentuk pengalokasian memori dinamis array :
//mengalokasikan 4 elemen array dinamis bertipe integer
int *nilai;
nilai = new int[4];

//contoh lain, mengalokasikan 15 elemen array dinamis bertipe char
char *kata;
char = new char[15];

*Untuk cara pemberian nilai akan langsung dicontohkan pada program

Bentuk pendealokasikan memori dinamis array :
Untuk pendealokasian memori dinamis array sedikit berbeda. Perlu ditambahkan simbol “[ ]” agar semua array dinamis dapat didealokasikan, tanpa simbol tersebut maka array dinamis yang didealokasikan adalah byte pertama saja.
delete [ ] nilai;
delete [ ] kata;

Berikut adalah contoh program sederhana alokasi dan dealokasi memori dinamis ARRAY pada C++:
/*
      Alokasi dan Dealokasi Memori Dinamis pada C++
      Microsoft Visual Studio Express 2012
      [RS]
*/

#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
      int jum;

      cout<<"ALOKASI DAN DEALOKASI MEMORI DINAMIS ARRAY"<<endl;
      cout<<"------------------------------------------"<<endl;
      cout<<"Masukkan jumlah nilai : ";
      cin>>jum;
      cout<<endl;

      //alokasi memori dinamis array
      int *nilai;
      nilai = new int[jum];

      //input nilai
      cout<<"Masukkan NILAI"<<endl;
      for (int i = 0; i < jum; i++)
      {
            cout<<"Nilai "<<i+1<<" : ";
            cin>>*(nilai+i);
      }
     
      cout<<endl;

      //menampilkan nilai
      cout<<"Menampilkan NILAI"<<endl;
      for (int j = 0; j < jum; j++)
      {
            cout<<"Nilai "<<j+1<<" = "<<*(nilai+j)<<endl;
      }

      //dealokasi memori dinamis array
      delete [] nilai;

      _getche();
      return 0;
}

Output
ALOKASI DAN DEALOKASI MEMORI DINAMIS ARRAY
------------------------------------------
Masukkan jumlah nilai : 5

Masukkan NILAI
Nilai 1 : 90
Nilai 2 : 85
Nilai 3 : 85
Nilai 4 : 100
Nilai 5 : 95

Menampilkan NILAI
Nilai 1 = 90
Nilai 2 = 85
Nilai 3 = 85
Nilai 4 = 100
Nilai 5 = 95


[RS]

Klik Like & Share jika postingan ini bermanfaat
Apa tanggapan Anda?

Berikan tanggapan Anda melalui kolom komentar yang telah disediakan.
- Gunakan bahasa yang sopan;
- Saat menjadikan postingan pada blog ini sebagai referensi, jangan lupa mencantumkan sumbernya (link dari blog ini).

Jika blog ini bermanfaat jangan lupa memberikan 'like' atau 'share' untuk mendapatkan update terbaru.

Terima kasih