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 bellek bölgesi kullanır: yığın ve öbek. Nesnelerinizin nerede bulunduğunu anlamak, verimli ve hatasız kod yazmak için çok önemlidir.

Yığın, hızlı ve otomatik bellektir. İşlevlerin içinde bildirilen değişkenler burada yaşar ve kapsam dışına çıktıklarında otomatik olarak yok edilir.

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

heap, manuel olarak yönettiğin daha büyük ancak daha yavaş bellektir. Heap'teki nesneler, onları açıkça silene 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ığınÖbek
Hızlı ayırmaDaha yavaş ayırma
Sınırlı boyutBüyük kapasite
Otomatik temizlemeEl ile temizleme gerekir
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 silmeyi unutmak, C++ programlarındaki yaygın hata kaynaklarından biri olan bellek sızıntılarına neden olur.

challenge icon

Görev

Kolay

Yığın ve öbek belleği arasındaki farkı, nesnelerin nasıl oluşturulup yok edildiğini izleyen basit bir Counter sınıfı oluşturarak inceleyelim.

Kodunuzu düzenlemek için iki dosya oluşturacaksınız:

  • Counter.h: Özel bir name özniteliğine (dize) sahip bir Counter sınıfı tanımlayın. Bir ad alan ve "Creating: <name>" yazdıran bir kurucu ile "Destroying: <name>" yazdıran bir yıkıcı ekleyin. Sayacın adını döndürmek için bir getName() yöntemi ekleyin.
  • main.cpp: Hem yığın hem de öbek ayırmayı gösterin. Girdiden bir ad okuyun, ardından:
    • Bu adı kullanarak yığında ayrılmış bir Counter oluşturun
    • "HeapCounter" adıyla öbekte ayrılmış bir Counter oluşturun
    • Her iki sayacın adını "Stack: <name>" ve "Heap: <name>" biçiminde yazdırın
    • Bellek sızıntısını önlemek için öbekte ayrılmış sayacı silin

Her nesneyi ne zaman oluşturup sildiğinize bağlı olarak kurucu ve yıkıcı mesajlarının farklı sıralarda göründüğünü gözlemleyin. Yığın nesnesi main() sona erdiğinde otomatik olarak yok edilirken öbek nesnesinin açıkça silinmesi gerekir.

Başlık dosyanızı #include "Counter.h" kullanarak main.cpp dosyasına ekleyin.

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