Değişkeniniz d
genellikle yığından çıkarılmaz. Kıvırcık parantezler yığın çerçevesini göstermez. Aksi takdirde, böyle bir şey yapamazsınız:
char var = getch();
{
char next_var = var + 1;
use_variable(next_char);
}
Kıvırcık parantezler gerçek bir yığın itme / pop'a neden olduysa (işlev çağrısı gibi), yukarıdaki kod derlenmeyecektir, çünkü parantez içindeki kod parantezlerin var
dışında yaşayan değişkene erişemeyecektir (tıpkı bir alt- işlev çağırma işlevindeki değişkenlere doğrudan erişemez). Bunun böyle olmadığını biliyoruz.
Kıvırcık parantezler sadece kapsam belirleme için kullanılır. Derleyici, kapalı parantezlerin dışından "iç" değişkenine herhangi bir erişimi geçersiz olarak ele alacaktır ve bu belleği başka bir şey için yeniden kullanabilir (uygulamaya bağlıdır). Ancak, kapatma işlevi dönünceye kadar yığından kaldırılamayabilir.
Güncelleme: İşte C özelliklerinin söyledikleri. Otomatik saklama süresine sahip nesneler hakkında (bölüm 6.4.2):
Değişken uzunlukta bir dizi türüne sahip olmayan bir nesne için, kullanım ömrü ilişkili olduğu bloğa girişten, o bloğun yürütülmesi yine de sona erene kadar uzar.
Aynı bölüm "ömür boyu" terimini (benimkini vurgulayan) olarak tanımlar:
Süresi bir nesnenin depolanması olan sırasında program yürütme kısmıdır garanti bunun için rezerve edilecek. Bir nesne vardır, sabit bir adrese sahiptir ve son saklanan değerini kullanım ömrü boyunca korur. Bir nesnenin kullanım ömrü dışında belirtilmesi durumunda, davranış tanımsızdır.
Buradaki anahtar kelime elbette 'garantilidir'. İç küme parantezinin kapsamından ayrıldıktan sonra dizinin ömrü sona erer. Depolama alanı bunun için ayrılabilir veya atanmayabilir (derleyiciniz alanı başka bir şey için yeniden kullanabilir), ancak diziye erişme girişimleri tanımlanmamış davranışları tetikler ve öngörülemeyen sonuçlar doğurur.
C spec'te yığın çerçeve kavramı yoktur. Yalnızca sonuçta ortaya çıkan programın nasıl davranacağından bahseder ve uygulama ayrıntılarını derleyiciye bırakır (sonuçta, uygulama yığınsız bir CPU'da donanım yığını olan bir CPU'dan çok farklı görünecektir). C spec'te yığın çerçevesinin biteceği veya bitmeyeceği hiçbir şey yoktur. Bilmenin tek gerçek yolu, derleyicinizdeki / platformunuzdaki kodu derlemeniz ve ortaya çıkan montajı incelemektir. Derleyicinizin mevcut optimizasyon seçenekleri kümesi de bu konuda büyük rol oynayacaktır.
d
Kodunuz çalışırken dizinin artık bellek tüketmediğinden emin olmak istiyorsanız, süslü parantez içindeki kodu ayrı bir işleve veya açık bir şekilde malloc
ve free
otomatik depolama yerine belleğe dönüştürebilirsiniz.