Yığının davranışı (büyüme veya küçülme) uygulama ikili arabirimine (ABI) ve çağrı yığınının (aka aktivasyon kaydı) nasıl organize edildiğine bağlıdır.
Kullanım ömrü boyunca bir program, işletim sistemi gibi diğer programlarla iletişim kurmaya mecburdur. ABI, bir programın başka bir programla nasıl iletişim kurabileceğini belirler.
Farklı mimariler için yığın her iki şekilde de büyüyebilir, ancak bir mimari için tutarlı olacaktır. Lütfen bu wiki bağlantısını kontrol edin . Ancak yığının büyümesine o mimarinin ABI'si tarafından karar verilir.
Örneğin, MIPS ABI alırsanız, çağrı yığını aşağıdaki gibi tanımlanır.
"Fn1" işlevinin "fn2" yi çağırdığını düşünelim. Şimdi, 'fn2'de görüldüğü gibi yığın çerçevesi aşağıdaki gibidir:
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
Şimdi yığının aşağı doğru büyüdüğünü görebilirsiniz. Dolayısıyla, değişkenler fonksiyonun yerel çerçevesine tahsis edilirse, değişkenin adresleri aslında aşağı doğru büyür. Derleyici, bellek tahsisi için değişkenlerin sırasına karar verebilir. (Sizin durumunuzda, ilk ayrılmış yığın belleği olan 'q' veya 's' olabilir. Ancak, genellikle derleyici, değişkenlerin bildirim sırasına göre yığın bellek ayırma işlemi yapar).
Ancak diziler söz konusu olduğunda, tahsisin yalnızca tek bir göstericisi vardır ve ayrılması gereken bellek aslında tek bir gösterici tarafından gösterilecektir. Bir dizi için belleğin bitişik olması gerekir. Yani, yığın aşağı doğru büyümesine rağmen, diziler için yığın büyür.