Perilaku tumpukan (tumbuh atau berkembang ke bawah) bergantung pada antarmuka biner aplikasi (ABI) dan bagaimana tumpukan panggilan (alias catatan aktivasi) diatur.
Sepanjang masa hidupnya program terikat untuk berkomunikasi dengan program lain seperti OS. ABI menentukan bagaimana suatu program dapat berkomunikasi dengan program lain.
Tumpukan untuk arsitektur yang berbeda dapat berkembang dengan cara apa pun, tetapi untuk arsitektur akan konsisten. Silakan periksa tautan wiki ini . Namun, pertumbuhan tumpukan ditentukan oleh ABI arsitektur tersebut.
Misalnya, jika Anda menggunakan MIPS ABI, tumpukan panggilan ditentukan seperti di bawah ini.
Mari kita pertimbangkan bahwa fungsi 'fn1' memanggil 'fn2'. Sekarang bingkai tumpukan seperti yang terlihat oleh 'fn2' adalah sebagai berikut:
direction of | |
growth of +---------------------------------+
stack | Parameters passed by fn1(caller)|
from higher addr.| |
to lower addr. | Direction of growth is opposite |
| | to direction of stack growth |
| +---------------------------------+ <-- SP on entry to fn2
| | Return address from fn2(callee) |
V +---------------------------------+
| Callee saved registers being |
| used in the callee function |
+---------------------------------+
| Local variables of fn2 |
|(Direction of growth of frame is |
| same as direction of growth of |
| stack) |
+---------------------------------+
| Arguments to functions called |
| by fn2 |
+---------------------------------+ <- Current SP after stack
frame is allocated
Sekarang Anda dapat melihat tumpukan tumbuh ke bawah. Jadi, jika variabel dialokasikan ke kerangka lokal fungsi, alamat variabel sebenarnya tumbuh ke bawah. Kompilator dapat memutuskan urutan variabel untuk alokasi memori. (Dalam kasus Anda, ini bisa berupa 'q' atau 's' yang pertama kali dialokasikan memori tumpukan. Tetapi, umumnya kompilator melakukan alokasi memori tumpukan sesuai urutan deklarasi variabel).
Tetapi dalam kasus array, alokasi hanya memiliki satu pointer dan memori yang perlu dialokasikan akan diarahkan oleh satu pointer. Memori harus bersebelahan untuk sebuah array. Jadi, meskipun tumpukan tumbuh ke bawah, untuk array, tumpukan tumbuh.