C Programlama #14 | Çağrı Yığını ve Yığın Çerçeveleri: lldb ile Gerçek Adresler
Fonksiyonlar, Prototipler ve Çağrı YığınıEğitmen: Dr. Süleyman Burak ÇELİK
main, hacim'i; hacim de alan'ı çağırıyor. Hangisi önce biter? On dördüncü derste bir fonksiyon çağrıldığında bellekte neler olduğuna bakıyoruz: çağrı yığını, yığın çerçeveleri ve dönüş adresi. Programı çalıştırınca başlama sırası main, hacim, alan; bitiş sırası ise tam tersi. Bunu üst üste kitaplarla açıklıyoruz: son giren ilk çıkar (LIFO), üste koymaya push, üstten almaya pop denir. Ardından çağrı yığınını adım adım kuruyoruz: her çağrı yığına bir çerçeve koyar; çerçevede dönüş adresi, parametreler ve yerel değişkenler vardır. Sonra hepsini lldb hata ayıklayıcısıyla gerçek bir oturumda görüyoruz: bt (backtrace) ile dört çerçeve, frame variable -L ile her çerçevenin değişkenleri ve adresleri (aynı ad, farklı adres), x/gx $fp+8 ile çerçevede saklanan dönüş adresi ve bunun backtrace'teki hacim satırıyla aynı olduğu, finish ile alan'ın çerçevesinin yığından kalkması (dönen değer 12). Son olarak yığının sınırlı olduğunu ölçüyoruz: ulimit -s 8176 KB, alan'ın çerçevesi 48 bayt; durmadan çağrı yapan bir program yığın taşmasıyla (stack overflow) çöker. Ekrandaki her çıktı ve adres, kodun ve hata ayıklayıcının gerçekten çalıştırılmasından geliyor (macOS, Apple Silicon). Bu derste: 1. Başlama ve bitme sırası: en son başlayan fonksiyon ilk biter 2. Yığın: push, pop ve son giren ilk çıkar (LIFO) 3. Yığın çerçevesi: dönüş adresi, parametreler, yerel değişkenler 4. lldb ile bt, frame variable -L, x/gx $fp+8 ve finish 5. Yığın sınırı (ulimit -s) ve yığın taşması Bölümler: 0:00 Bir fonksiyon çağrıldığında bellekte neler olur? 0:17 Kim önce biter? 0:49 Yığın: son giren ilk çıkar 1:10 Çağrı yığını ve yığın çerçevesi 2:08 Gerçek yığın: hata ayıklayıcıda bt 2:42 Her çerçevenin kendi değişkenleri ve adresleri 3:22 alan bitince: çerçevesi yığından kalkar 3:48 Yığın sınırlı: yığın taşması 4:33 Bugünün dört kuralı 4:59 Sonraki ders: başlık dosyaları ve değerle geçirme Kaynak kitap: Paul Deitel, Harvey Deitel — C How to Program, 9. baskı (2022), §5.7. Konu sırası ve kavramlar kaynak kitaptan izlenir; anlatım, örnekler ve ekranlar özgündür. Hedef kitle: C'ye yeni başlayan tüm mühendislik ve bilgisayar/yazılım öğrencileri. Ön koşul: C Programlama #01–#13.
Bu videoyu izlemek için Premium üyelik gerekir.