Menu
Coddy logo textTech

Stack ve Heap Bellek

Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 12 / 104.

C++ programları iki ana memory bölgesi kullanır: yığın ve heap. Nesnelerinizin nerede yaşadığını anlamak, verimli ve hatasız kod yazmak için çok önemlidir.

yığın hızlı, otomatik memory'dir. İşlevlerin içinde bildirilen değişkenler burada yaşar ve kapsam dışına çıktıklarında automatically destroyed olur.

void example() {
    int x = 10;           // Yığın tahsisi
    Player player;        // Yığın tahsisi - otomatik olarak yok edilir
}   // x ve player burada yok edilir

heap, daha büyük ancak daha yavaş bir memory'dir ve bunu elle yönetirsin. heap üzerindeki nesneler, onları açıkça delete edene kadar varlığını sürdürür.

void example() {
    Player* player = new Player();  // Heap tahsisi
    // player silinene kadar var olur
    delete player;                   // Manuel temizlik gerekli
}

Temel farklar:

YığınHeap
Hızlı allocationDaha yavaş allocation
Sınırlı boyutBüyük kapasite
Otomatik cleanupManual cleanup gerekli
Sabit boyutlu nesnelerDinamik boyutlu nesneler

Küçük ve kısa ömürlü nesneler için yığın tahsisini kullanın. Nesnelerin kapsamlarını aşması gerektiğinde veya boyutları çalışma zamanında belirlendiğinde heap tahsisini kullanın.

Heap belleğini delete etmeyi unutmak, C++ programlarındaki yaygın bir hata kaynağı olan memory leaks sorununa yol açar.

challenge icon

Görev

Kolay

Nesnelerin nasıl oluşturulduğunu ve yok edildiğini izleyen basit bir Counter class oluşturarak stack ve heap memory arasındaki farkı keşfedelim.

Code'unuzu düzenlemek için iki dosya oluşturacaksınız:

  • Counter.h: private bir name niteliğine (string) sahip bir Counter class define edin. Bir name alan ve "Creating: <name>" yazdıran bir constructor ile "Destroying: <name>" yazdıran bir destructor include edin. Counter'ın name değerini return etmek için bir getName() method ekleyin.
  • main.cpp: Hem stack hem de heap allocation işlemlerini gösterin. input'tan bir name okuyun, ardından:
    • Bu name'i kullanarak stack'te allocation edilmiş bir Counter oluşturun
    • "HeapCounter" name'ine sahip, heap'te allocation edilmiş bir Counter oluşturun
    • Her iki counter name'ini "Stack: <name>" ve "Heap: <name>" formatında Print edin
    • Bir memory leak'i prevent etmek için heap'te allocation edilmiş counter'ı Delete edin

Her nesneyi ne zaman oluşturup Delete ettiğinize bağlı olarak constructor ve destructor mesajlarının farklı sıralarda göründüğüne dikkat edin. Stack nesnesi, main() sona erdiğinde automatically yok edilirken heap nesnesi açıkça Delete edilmelidir.

#include "Counter.h" kullanarak header file'ınızı main.cpp'ye include edin.

Kendin dene

#include <iostream>
#include <string>
#include "Counter.h"

using namespace std;

int main() {
    // Girdiden ismi oku
    string inputName;
    cin >> inputName;

    // TODO: inputName kullanarak yığın üzerinde ayrılmış bir Counter oluştur

    // TODO: "HeapCounter" adıyla öbek üzerinde ayrılmış bir Counter oluştur

    // TODO: Print stack counter name in format "Stack: <name>"

    // TODO: Öbek sayacının adını "Heap: <name>" formatında yazdır

    // TODO: Bellek sızıntısını önlemek için öbek üzerinde ayrılmış sayacı sil

    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C++ derleyicisi