Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Çerçevedeki ayırma, bir işlev çağrıldığında ayarlanan "yığın çerçevesinden" adını alır. Yığın çerçevesi, işlev için yerel olarak tanımlanan değişkenler ve işlevin argümanlarını geçici olarak tutan bir bellek alanıdır. Derleyici bu değişkenler için alanı otomatik olarak ayırdığından çerçeve değişkenlerine genellikle "otomatik" değişkenler adı verilir.
Çerçeve ayırmalarının iki temel özelliği vardır. İlk olarak, bir yerel değişken tanımladığınızda, yığın çerçevesinde büyük bir dizi veya veri yapısı olsa bile değişkenin tamamını tutmak için yeterli alan ayrılır. İkincisi, çerçeve değişkenleri kapsam dışına çıktığında otomatik olarak silinir:
void MyFunction()
{
// Local object created on the stack
CString strName;
// Object goes out of scope and is deleted as function ends
}
Yerel işlev değişkenleri için bu kapsam geçişi işlevden çıkıldığında gerçekleşir, ancak iç içe küme ayraçları kullanıldığında çerçeve değişkeninin kapsamı işlevden daha küçük olabilir. Çerçeve değişkenlerinin otomatik olarak silinmesi çok önemlidir. Basit ilkel türler (veya int gibi), diziler veya veri yapıları söz konusu olduğunda, otomatik silme işlemi değişkeni tarafından kullanılan belleği geri alır. Değişken kapsamın dışına çıktığı için yine de erişilemez. Ancak C++ nesneleri söz konusu olduğunda, otomatik silme işlemi biraz daha karmaşıktır.
Bir nesne çerçeve değişkeni olarak tanımlandığında, oluşturucu tanımın karşılandığı noktada otomatik olarak çağrılır. Nesne kapsam dışına çıktığında, nesnenin belleği geri kazanılmadan önce yok edicisi otomatik olarak çağrılır. Bu otomatik yapı ve yıkım çok kullanışlı olabilir, ancak özellikle yıkıcıya yapılan otomatik çağrıların farkında olmanız gerekir.
Nesneleri çerçeveye ayırmanın temel avantajı, nesnelerin otomatik olarak silinmesidir. Nesnelerinizi çerçeveye ayırdığınızda bellek sızıntılarına neden olan unutulan nesneler konusunda endişelenmeniz gerekmez. (Bellek sızıntılarıyla ilgili ayrıntılar için MFC'de Bellek Sızıntılarını Algılama makalesine bakın.) Çerçeve ayırmanın dezavantajı, çerçeve değişkenlerinin kapsamları dışında kullanılamamalarından kaynaklanır. Çerçeve ayırma yerine yığın ayırmayı seçmenin bir diğer faktörü, büyük yapılar ve nesneler için depolama söz konusu olduğunda, yığın alanının genellikle sınırlı olması nedeniyle yığının yerine heap kullanımının daha iyi olmasıdır.