Menu
CoddyTech

Memori Stack vs Heap

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 12 dari 104.

Program C++ menggunakan dua area memori utama: stack dan heap. Memahami di mana object-mu berada sangat penting untuk menulis kode yang efisien dan bebas bug.

stack adalah memori yang cepat dan otomatis. Variabel yang dideklarasikan di dalam fungsi disimpan di sini dan otomatis dihapus saat keluar dari cakupannya.

void example() {
    int x = 10;           // Alokasi di stack
    Player player;        // Alokasi di stack, dihancurkan secara otomatis
}   // x dan player dihancurkan di sini

heap adalah memori yang lebih besar tetapi lebih lambat, yang kamu kelola secara manual. Object di heap tetap ada sampai kamu menghapusnya secara eksplisit.

void example() {
    Player* player = new Player();  // Alokasi memori di heap
    // player tetap ada hingga dihapus
    delete player;                   // Perlu dibersihkan secara manual
}

Perbedaan utama:

StackHeap
Alokasi cepatAlokasi lebih lambat
Ukuran terbatasKapasitas besar
Pembersihan otomatisPerlu pembersihan manual
Object berukuran tetapObject berukuran dinamis

Gunakan alokasi stack untuk object kecil yang berumur pendek. Gunakan alokasi heap saat object perlu bertahan lebih lama daripada cakupannya atau saat ukurannya ditentukan saat runtime.

Lupa menghapus memori heap menyebabkan kebocoran memori, sumber bug yang umum dalam program C++.

challenge icon

Tantangan

Mudah

Mari kita pelajari perbedaan antara memori stack dan heap dengan membuat class Counter sederhana yang melacak kapan object dibuat dan dihancurkan.

Kamu akan membuat dua file untuk mengatur kodemu:

  • Counter.h: Definisikan class Counter dengan atribut name privat (string). Sertakan constructor yang menerima name dan mencetak "Creating: <name>", serta destructor yang mencetak "Destroying: <name>". Tambahkan method getName() untuk mengembalikan name counter.
  • main.cpp: Tunjukkan alokasi di stack dan heap. Baca name dari input, lalu:
    • Buat Counter yang dialokasikan di stack dengan name tersebut
    • Buat Counter yang dialokasikan di heap dengan name "HeapCounter"
    • Cetak kedua name counter dengan format "Stack: <name>" dan "Heap: <name>"
    • Hapus counter yang dialokasikan di heap untuk mencegah kebocoran memori

Perhatikan urutan kemunculan pesan constructor dan destructor yang berbeda, bergantung pada kapan kamu membuat dan menghapus setiap object. Object di stack akan dihancurkan secara otomatis saat main() berakhir, sedangkan object di heap harus dihapus secara eksplisit.

Sertakan file header-mu di main.cpp menggunakan #include "Counter.h".

Coba sendiri

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

using namespace std;

int main() {
    // Baca nama dari input
    string inputName;
    cin >> inputName;

    // TODO: Buat Counter yang dialokasikan di stack menggunakan inputName

    // TODO: Buat Counter yang dialokasikan di heap dengan nama "HeapCounter"

    // TODO: Cetak nama counter di stack dengan format "Stack: <name>"

    // TODO: Cetak nama counter di heap dengan format "Heap: <name>"

    // TODO: Hapus counter yang dialokasikan di heap untuk mencegah kebocoran memori

    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler C++ online