Perbedaan Stack Dan Heap Pada Program Komputer

Pada artikel tentang alokasi memori statis dan dinamis, disana telah dibahas tentang perbedaan antara stack dan heap, khususnya untuk alokasi memori dinamis. Pada artikel ini saya akan membahas Stack Dan Heap lebih mendalam, mulai dari pengertian, perbedaan, dan implementasinya pada program komputer.

Untuk memudahkan pemahaman, disni saya akan mengulang kembali secara ringkas bagaimana alur kerja pemrograman tersebut dimulai hingga sampai tahap pengalokasian memori..

Cara Kerja Pemrograman

Agar programer dapat memberikan instruksi perintah kepada komputer, maka ia harus menulis atau melakukan proses coding dalam bahasa pemprograman. Namun, komputer hanya mengunakan bahasa mesin yang terdiri dari angka biner (angka 0 dan I).

Oleh sebab itu, bahasa mesin tersebut harus di terjemahkan dulu ke bahasa manusia melalui serangkaian proses yang disebut dengan kompilasi, sehingga menghasilkan sebuah file yang disebut sebagai program.

Program tersebut diciptakan dengan sebuah struktur, dan saat program dijalankan maka ia akan menempati lokasi atau alamat tertentu di memori komputer. Lokasi atau alamat memori untuk menyimpan data dalam pemrograman komputer dikenal sebagai variabel.

Alokasi memori pada Program komputer

Saat suatu program dijalankan, maka komputer akan mengalokasikan memori untuk program tersebut di RAM, yang terbagi menjadi empat bagian yaitu :

  • Code, bagian untuk menyimpan kode
  • Static, bagian untuk menyimpan variabel global atau static
  • Stack, bagian untuk menyimpan variabel lokal
  • Heap, bagian untuk menyimpan variabel dengan alokasi dinamis.

Sampai disini anda mungkin sudah paham dari beberapa istilah dan proses alur program sistem komputer. Selanjutnya mari kita ke topik pembahasan tentang apa itu Stack dan Heap pada program komputer.

Apa itu stack ?

Stack atau tumpukan adalah salah satu bagian yang digunakan untuk menyimpan data-data atau variabel yang pengalamatan memorinya telah dilakukan saat kompilasi.

Stack digunakan untuk menyimpan memori yang bersifat sementara. Untuk penyimpanan data pada Stack, maka data didasarkan pada urutan masuknya. Ibaratnya, kotak kardus yang ditumpuk, pasti kita menumpuknya dari atas, bukan diselipkan ketengah atau dari bawah.

perbedaan antara stack dan heap

Data yang tersimpan di memori stack akan di alokasi dan didealokasi hanya di akhir memori, yang disebut dengan Last In First Out (LIFO). Kalau dari analogi kotak kardus tadi, kita akan mengambil batu bata yang sudah ditumpuk pasti dari yang letak terakhir.

Berdasarkan analogi batu bata inilah maka stack akan lebih cepat dalam menyimpan dan mengambil data. Sedangkan maksud dari Alokasi adalah suatu proses yang dilakukan program untuk memesan atau meminta memori tambahan kepada komputer.

Apa itu heap ?

Heap adalah area memori yang digunakan untuk alokasi secara dinamis untuk mensuplai memori tambahan yang tidak dialokasikan saat kompilasi. Alokasi ini dilakukan saat program sedang berjalan (runtime). Bagian-bagian memori yang dialokasikan ini dilakukan secara acak atau tidak berpola (pattern).

Untuk memesan alamat memori, terlebih dahulu program akan mengecek kapasitas memori sesuai besar data yang diperlukan. Jika memori masih tersedia namun dalam ruang yang terpisah, maka program akan memecah informasi tersebut menjadi bagian-bagian kecil sehingga dapat menempati memori yang tersedia tersebut. Lokasi memori yang ditempati juga tidak akan diketahui sebelum program dijalankan

Kalau kita analogikan, kita akan memesan tiket pesawat untuk jadwal berangkat pagi, lalu customer servicenya bertanya ”untuk berapa orang ?”. Maka tempat duduk anda akan disesuaikan dengan jumlah tiket yang masih tersedia dan jadwalnya.

Namun jika tiket yang tersisa hanya untuk jadwal malam, maka customer servicenya bilang  ”Maaf, jadwal pagi sudah penuh, bagaimana kalau pesan jadwal malam saja ?”

Berdasarkan analogi diatas, maka heap digunakan untuk menyimpan data tambahan sesuai pesanan (request data). Data di heap dapat berubah dan ukurannya tidak diketahui. Selain itu harus melalui proses yang lebih untuk menyimpan dan mengambil data, karena kita harus mencarikan tempat atau alamat untuk data tersebut.

Perbedaan Antara Stack Dan Heap

1. Stack lebih banyak dari pada heap dalam mengalokasikan memori pada variabel-variabel yang digunakan dalam fungsi,

2. Stack digunakan untuk menyimpan data sementara, sedangkan Heap digunakan untuk menyimpan data tambahan sesuai permintaan.

3. Memori yang dialokasikan pada heap dilakukan secara acak atau tidak berpola (pattern), sedangkan stack menyimpan data berdasarkan urutan masuknya.

4. Stack akan lebih cepat dalam menyimpan dan mengambil data dibandingkan heap yang harus melalui serangkaian proses untuk menyimpan dan mengambil data

Stack dan Heap dalam Pemrograman

Pada contoh program ini ditulis dalam bahasa C yang memiliki fungsi utama yaitu main().  Fungsi ini merupakan fungsi utama dan awal mula program dijalankan. Ada beberapa bahasa pemrograman yang memiliki fungsi tersebut seperti C, C++, JAVA.  

Contoh :

#include <stdio.h>
int a= 0;
void main() {
   int b = 1;
}

Semua baris instruksi akan disimpan ke dalam Code. Nilai dari variabel “a” akan disimpan pada bagian Static/Global dan nilai dari variabel ”b” akan disimpan di dalam Stack.

Untuk area heap digunakan untuk menyimpan data yang ukurannya dinamis dan akan disimpan di lokasi yang acak. Data dinamis adalah data yang ukurannya tidak tetap.

Contoh :

// ini variabel dengan ukuran tetap
int y[10];

// ini ukuran variabel dengan ukuran dinamis
char nama[];

Variabel ”y” diisi nilai 10 dengan data integer, dimana ukuran default-nya adalah 4 byte. Jadi, ukuran variabel ini adalah 10 * 4 byte. Ukuran ini tidak bisa berubah secara dinamis. karena sudah kita alokasikan ukurannya 10 * 4 byte.

Untuk variabel ”nama”, tetap disimpan ke dalam Stack, tapi bisa disi dengan panjang berapapun karena ukurannya sudah dinamis.

Batas ukuran pada stack ini sudah ditentukan oleh sistem operasi. Misalnya, ukuran stack kita 5 MB, Apabila variabel ”nama” ini diisi dengan teks yang ukurannya 6 MB maka akan terjadi Stack Overflow. Oleh sebab itu kita perlu mengalokasikannya ke memori Heap.

Salah satu fungsi pada bahasa C yang digunakan untuk mengalokasikan memori secara dinamis dan datanya disimpan pada memori heap adalah Fungsi malloc().

Contoh :

char nama[] = "praktekotodidak"; // diinputkan user

// alokasi memori dinamis
char *nama = malloc(16);

Pada contoh diatas, kita sudah membuat variabel *nama dengan tipe data char dan akan disimpan ke dalam heap dengan ukuran 16 byte.

Begitulah pembahasan mengenai perbedaan Stack Dan Heap pada program komputer. Semoga bermanfaat..

Tinggalkan Balasan

Scroll to Top