Bagikan melalui


Manajemen Memori: Contoh

Artikel ini menjelaskan bagaimana MFC melakukan alokasi bingkai dan alokasi timbunan untuk masing-masing dari tiga jenis alokasi memori yang khas:

Alokasi Array dari Bita

Untuk mengalokasikan array byte di dalam bingkai

  1. Tentukan array seperti yang ditunjukkan oleh kode berikut. Array dihapus secara otomatis dan memorinya diklaim kembali ketika variabel array keluar dari cakupannya.

    {
    const int BUFF_SIZE = 128;
    
    // Allocate on the frame
    char myCharArray[BUFF_SIZE];
    int myIntArray[BUFF_SIZE];
    // Reclaimed when exiting scope 
    }
    

Untuk mengalokasikan array byte (atau jenis data primitif apa pun) pada timbunan

  1. new Gunakan operator dengan sintaks array yang ditunjukkan dalam contoh ini:

    const int BUFF_SIZE = 128;
    
    // Allocate on the heap
    char* myCharArray = new char[BUFF_SIZE];
    int* myIntArray = new int[BUFF_SIZE];
    

Untuk membatalkan alokasi array dari tumpukan

  1. delete Gunakan operator sebagai berikut:

    delete[] myCharArray;
    delete[] myIntArray;
    

Alokasi Struktur Data

Untuk mengalokasikan struktur data pada bingkai

  1. Tentukan variabel struktur sebagai berikut:

    struct MyStructType { int topScore; };
    void MyFunc()
    {
       // Frame allocation
       MyStructType myStruct;
    
       // Use the struct 
       myStruct.topScore = 297;
    
       // Reclaimed when exiting scope
    }
    

    Memori yang ditempati oleh struktur diklaim kembali ketika keluar dari cakupannya.

Untuk mengalokasikan struktur data pada heap

  1. Gunakan new untuk mengalokasikan struktur data pada tumpukan dan delete untuk membatalkan alokasinya, seperti yang ditunjukkan oleh contoh berikut:

    // Heap allocation
    MyStructType* myStruct = new MyStructType;
    
    // Use the struct through the pointer ...
    myStruct->topScore = 297;
    
    delete myStruct;
    

Alokasi dari sebuah Objek

Untuk mengalokasikan objek pada bingkai

  1. Deklarasikan objek sebagai berikut:

    {
    CMyClass myClass;     // Automatic constructor call here
    
    myClass.SomeMemberFunction();     // Use the object
    }
    

    Destruktor untuk objek secara otomatis dipanggil ketika objek keluar dari cakupannya.

Untuk mengalokasikan objek pada timbunan

  1. Gunakan operator new, yang mengembalikan penunjuk ke objek, untuk mengalokasikan objek pada heap. delete Gunakan operator untuk menghapusnya.

    Contoh heap dan frame berikut mengasumsikan bahwa CPerson konstruktor tidak memerlukan argumen.

    // Automatic constructor call here
    CMyClass* myClass = new CMyClass;
    
    myClass->SomeMemberFunction();  // Use the object
    
    delete myClass;  // Destructor invoked during delete
    

    Jika argumen untuk CPerson konstruktor adalah pointer ke char, pernyataan untuk alokasi frame adalah:

    CMyClass myClass("Joe Smith");
    

    Pernyataan untuk alokasi timbunan adalah:

    CMyClass* myClass = new CMyClass("Joe Smith");
    

Lihat juga

Manajemen Memori: Alokasi Timbunan