8 - Functions in C and the call stack


Optimizasyon açıkçsa inline keyword olmasa bile derleyici inline yapabilir.

ARM’da return adresi LR, R14 registerında saklanıyor.

SP, R13 stack’ı gösteriyor. C stack’in hardware implementasyonu.

SP top of stack gösteriyor. ARM’da stack BÜYÜDÜKÇE, DÜŞÜK adreslere gidiyoruz. Stack KÜÇÜLDÜKÇE, YÜKSEK adreslere gidiyoruz. Başka işlemcilerde farklı yönde olabilir.

Bir fonksiyona girince SP, 4 azaltılıyorsa stack 4 byte büyütüldü demektir. Yani aslında 4 byte için yer ayırıyor. Sonra SPye STR ile stor edince bu yeni alan kullanılıyor. Fonksiyondan dönerken ise SP 4 arttırılıyor yani restore ediliyor.

Stack’e PUSH edince otomatik olarak adresi de değişiyor ve değer depolanıyor. Bu hem otomatik hem de atomik oluyor.

Stack’in iki amacı var:

  1. Lokal değişkenleri tutmak

  2. Return adresleri tutmak

Yaptığımız örnekte bir fonksiyona argüman geçirince bunu stack ile değil, R0 ile geçirdi mesela.