top of page

Stack Memory

Sering dengar istilah stack overflow? ya, karena memang berkaitan dengan topik kita hari ini.


Sebenarnya apa itu stack? stack dalam bahasa indonesia berarti tumpukan, tumpukan apa?

Tumpukan data pastinya. Lebih spesifiknya tumpukan data yang bersifat temporary seperti processor register value, local variable of function. dan sebagainya.


Jadi definisinya, stack memory adalah memory segment yang dialokasikan di RAM sebagai tempat untuk menaruh data yang bersifat sementara.

Stack memory mulai digunakan pada saat eksekusi function/subroutine atau ketika interrupt/exception terjadi.


Data yang disimpan di Stack Memory

  • Processor register value, Masih ingat processor register ada apa saja? general purpose register, stack pointer, link register, status register, dsb.

  • Local variable of the function

  • Context, Selama sistem exception atau interrupt, stack memori digunakan untuk menyimpan context seperti general-purpose registers, processor status register, dan return address.

Tunggu, apa itu context dalam stack memory?

Context dalam stack memory adalah status sebuah program pada saat tertentu.


Setiap kali program memanggil subroutine/function, informasi seperti register, PC (program counter), dan alamat stack saat ini disimpan sebagai context. Context menyimpan informasi atau status program saat itu.


Kenapa context harus disimpan? supaya pada saat subroutine selesai dieksekusi, processor dapat kembali ke alur program sebelumnya dengan lancar, karena informasi sebelumnya disimpan di dalam context.


Stack operation model

Stack memory bekerja dengan mekanisme LIFO (Last In First Out) yang berarti data terakhir yang dimasukkan ke dalam stack akan diambil terlebih dahulu saat mengeluarkan data.


Untuk melakukan operasi terhadapnya, kita menggunakan instruksi PUSH (menyimpan) dan POP (menghapus).


Processor ARM menggunakan model Full-descending stack artinya SP di-decrement (Descending) dulu baru data disimpan. Full artinya SP merujuk ke data terakhir/bawah.

Stack Memory
LIFO operation - Credit : Bluegalaxy.info

Model Operasi Stack yang lain

Setidaknya ada 4 model operasi stack

  • Full Ascending Stack

  • Full Descending Stack (ARM Cortex-M Processor)

  • Empty Ascending Stack

  • Empty Ascending Stack

Stack pointer

Stack pointer digunakan untuk mentracking data terakhir yang dimasukkan ke stack memory. Dalam ARM Processor SP merupakan Register 13 yang digunakan untuk menyimpan alamat dari data terakhir yang dimasukkan, atau dengan kata lain SP melakukan tracking terhadap data yang masuk.


Terdapat 2 Stack Pointer yang bisa digunakan


Main Stack Pointer (MSP)

MSP akan di pilih sebagai SP setelah processor mengalami reset. Pada saat reset, MSP menyimpan value dari alamat 0x0000_0000 dimana vector table berada


Process Stack Pointer (PSP)

Dibanyak kasus, PSP hanya digunakan apabila sistem yang menggunakan OS, sehingga PSP jarang digunakan. Untuk mengubah SP dari MSP ke PSP bisa dilakukan dengan cara mengubah bit[1] pada CONTROL register.


Nah, apa itu stack overflow

Simple-nya, stack overflow berarti terlalu banyak data yang bertumpuk sehingga memori yang dialokasikan tidak cukup untuk menampungnya.


Definisi menurut wikipedia

If the stack is full and does not contain enough space to accept another element, the stack is in a state of stack overflow.

Hal ini terjadi biasanya pada fungsi rekursif, yaitu fungsi yang memanggil dirinya sendiri tanpa henti.

Dokumen Terkait

  • AAPCS (Procedure call standard for the ARM Architecture)

bottom of page