Modul 4 : Static & Dynamic Allocate Memory - IvanSholana/Algoritma-dan-Struktur-Data GitHub Wiki
Allocate Memory
Seperti diketahui dalam menjalankan sebuah program akan diperlukan memori untuk menyimpan data-data dari program yang sedang dijalankan. Di dalam dunia pemograman sendiri terdapat 2 jenis alokasi memori yaitu Static Allocate Memory
dan Dynamic Allocate Memory
. Kedua jenis alokasi tersebut memiliki perbedaan cara kerja, sifat, dan area memori data tersebut disimpan. Untuk memahami lokasi dari pengalokasian memori tersebut maka dibutuhkan pemahaman C Memory Layout
.
Memory Layout in C
Memory Layout atau tata letak memori adalah pembagian area dalam memori yang disediakan oleh compiler pada RAM ketika program dijalankan. Dalam bahasa C dan C++ pembagian tata letak ini dibagi menjadi 6 bagian. Masing masing bagian pada memori ini memiliki jenis data yang akan disimpan dan write/read premissionnya masing masing. Sekilas pembagian memori pada C dapat dilihat sebagai berikut: Adapun penjelasan dari tiap - tiap bagian dari alokasi memori tersebut adalah:
- Text/Code Segment, pada bagian ini disimpan kode program yang telah digenerate oleh compiler menjadi binary file yang bertugas sebagai instruksi dari bagaimana berjalannya program. Pada bagian ini memori bersifat read only karena dikhawatirkan terjadi perubahan program yang tidak disengaja dan berpotensi menyebabkan error.
- Initialize Data Segment, pada bagian ini dialokasikan memori untuk menyimpan nilai dari external, global, static, dan constant variables yang telah diinisialisasi atau dilakukan assigment pada kode program sebelum program dicompile. Pada bagian ini memori bersifat read and write. Write diperlukan karena terdapat kemungkinan bahwa nilai dari suatu variabel dapat berganti sewaktu waktu. Namun pada const variabel, nilainya bersifat read only.
- Uninitialized data segment, bagian ini juga disebut bss (block started by symbol). Pada bagian ini melakukan alokasi memori untukexternal, global, static, and constant variabel-variabel yang nilainya tidak diberikan di awal sehingga compiler secara default memberikan nilai 0 atau null pada variabel yang disimpan pada bagian ini.
- Stack, pada bagian ini dilakukan alokasi memori untuk menyimpan setiap data dan operasi yang berlangsung secara statis seperti alokasi memori untuk pemanggilan fungsi main() dan seluruh deklarasi variabel yang berlangsung di dalam fungsi. Artinya alokasi memori statis terjadi disini. Sesuai namanya, stack bekerja dengan prinsip FILO (First In Last Out) yang berjalan dari awal hingga akhir program. Saat program atau sub program selesai dijalankan, maka stack akan melakukan pop.
- Heap, bagian ini juga disebut dengan free store. Pada bagian ini dilakukan pengalokasian memori secara dinamis atau pengalokasian memori pada saat runing time atau pada saat program sedang berjalan. Pada bagian ini lah nantinya malloc, alloc, relloc, new, delete, dan free diaplikasikan.
Static Allocate Memory
Alokasi memori statis adalah pengalokasian atau penyediaan memori untuk menyimpan data - data pada program ketika compile time atau sebelum program berjalan. Dengan menggunakan alokasi memori statis, maka besar dari memori yang telah dialokasikan tidak dapat dirubah (ditambah atau dikurangi). Dalam implementasinya, alokasi memori pada C memory layout yang digunakan untuk pengalokasian adalah bagian stack
. Salah satu implementasi dari Static Allocate Memory
adalah array.
Dynamic Allocate Memory
Alokasi memori dinamis adalah pengalokasian memori saat running time atau ketika program terebut berjalan. Tempat pengalokasian dari alokasi memori dinamis adalah pada bagian heap. Pada bagian ini pengalokasian memori dilakukan secara random. Dengan mengunakan alokasi memori dinamis, dimungkinkan untuk melakukan perubahan besar atau memanipulasi ukuran memori secara berulang kali sesuai dengan kebutuhan. Sehingga dapat dikatakan bahwa dengan menggunakan alokasi memori dinamis maka ukuran memori yang dialokasikan tidak paten. Dalam melakukan alokasi atau dealokasi memori secara dinamis tersebut digunakan beberapa fungsi seperi malloc()
, calloc()
, realloc()
, dan free()
.