Stack ve Heap Bellek
Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 31 / 63.
C programınız çalıştığında, iki farklı bellek bölgesi kullanır: stack ve heap. Bu bellek alanları arasındaki farkı anlamak, özellikle pointer'lar ve dinamik bellek tahsisi ile çalışırken etkili C programlama için kritik öneme sahiptir.
Yığın (stack), statik bellek ayırma için kullanılır. Yerel değişkenleriniz, fonksiyon parametreleriniz ve fonksiyon çağrısı bilgileriniz burada saklanır. Yığın, sistem tarafından otomatik olarak yönetilir; yerel bir değişken tanımladığınızda yığında bellek ayrılır ve değişken kapsam dışına çıktığında bu bellek otomatik olarak serbest bırakılır.
void function() {
int x = 10; // Yığın (stack) üzerinde ayrıldı
char arr[100]; // Ayrıca yığın (stack) üzerinde ayrıldı
// Fonksiyon sona erdiğinde bellek otomatik olarak serbest bırakılır
}heap, dinamik bellek ayırma için kullanılır. Bu, program yürütme sırasında talep edebileceğiniz daha büyük bir bellek havuzudur.
Stack'in aksine, heap manuel yönetim gerektirir - belleği açıkça talep etmeli ve işiniz bittiğinde daha sonra serbest bırakmalısınız. Bu size daha fazla kontrol sağlar ancak aynı zamanda daha fazla sorumluluk yükler.
Temel fark yönetimdir: yığın (stack) belleği otomatiktir ve boyutu sınırlıdır, öbek (heap) belleği ise manueldir ve çok daha büyüktür. Gelecek derslerde, malloc() ve free() gibi fonksiyonları kullanarak öbek belleği ile nasıl çalışacağınızı öğreneceksiniz.
Kopya kağıdı
C programları iki farklı bellek bölgesi kullanır:
Stack (Yığın): Statik bellek tahsisi için kullanılır. Yerel değişkenleri, fonksiyon parametrelerini ve fonksiyon çağrısı bilgilerini saklar. Bellek otomatik olarak yönetilir - değişkenler tanımlandığında tahsis edilir ve kapsam dışına çıktıklarında serbest bırakılır.
void function() {
int x = 10; // Stack üzerinde tahsis edildi
char arr[100]; // Ayrıca stack üzerinde tahsis edildi
// Fonksiyon bittiğinde bellek otomatik olarak serbest bırakılır
}Heap (Öbek): Dinamik bellek tahsisi için kullanılır. Manuel yönetim gerektiren daha büyük bir bellek havuzudur - malloc() ve free() gibi fonksiyonları kullanarak belleği açıkça talep etmeli ve serbest bırakmalısınız.
Temel fark: Stack belleği otomatiktir ve boyutu sınırlıdır, heap belleği ise manueldir ve çok daha büyüktür.
Kendin dene
Bu ders bir kod alıştırması içermiyor.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Logic & Flow bölümündeki tüm dersler
1Pointer Temelleri
Pointer Nedir?Pointer TanımlamaAdres Operatörü (&)Dereference Operatörü (*)NULL Pointer'larÖzet: Pointer Temelleri4Proje: Basit Metin Aracı
Projeye Genel BakışKarakter Sayma2İşaretçiler ve Diziler
İşaretçi Olarak Dizi İsimleriDizi Elemanları - İşaretçilerİşaretçi Aritmetiğiİşaretçilerin KarşılaştırılmasıÖzet: İşaretçi ile Dizi Gezinme5İşaretçiler ve Fonksiyonlar
Değer ile GeçmeFonksiyonlara İşaretçi Göndermeİşaretçiler ile Değişkenleri DeğiştirmeKlasik Bir Örnek: SwapFonksiyonlara Dizi GöndermeÖzet: Fonksiyon İşaretçi Argümanları8Yapılar ve İşaretçiler
Yapılara İşaretçilerOk Operatörü (->)Yapıları Değer ile AktarmaYapı İşaretçilerini AktarmaYapıların Dinamik TahsisiÖzet: Yapıyı Değiştirme - Ptr11Son Tekrar Görevleri
Tekrar: Dinamik String BirleştirmeTekrar: Struct DizisiTekrar: Kelime Frekans Sayacı3Karakter Dizileri ve Stringler
char Dizisi Olarak StringlerNull Sonlandırıcıscanf ile String Girişistrlen() Kullanımıstrcpy() Kullanımıstrcat() Kullanımıstrcmp() KullanımıÖzet: Temel String Fonksiyonları