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.
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)