Udostępnij za pośrednictwem


Zarządzanie pamięcią: przykłady

W tym artykule opisano sposób wykonywania alokacji ramek i alokacji sterty dla każdego z trzech typowych rodzajów alokacji pamięci:

Alokacja tablicy bajtów

Aby przydzielić tablicę bajtów w ramce

  1. Zdefiniuj tablicę, jak pokazano w poniższym kodzie. Tablica zostanie automatycznie usunięta, a jej pamięć zostanie odzyskana, gdy zmienna tablicowa zakończy jego zakres.

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

Aby przydzielić tablicę bajtów (lub dowolny typ danych pierwotnych) na stercie

  1. new Użyj operatora z składnią tablicy pokazaną w tym przykładzie:

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

Aby cofnąć przydział tablic z sterta

  1. delete Użyj operatora w następujący sposób:

    delete[] myCharArray;
    delete[] myIntArray;
    

Alokacja struktury danych

Aby przydzielić strukturę danych na ramce

  1. Zdefiniuj zmienną struktury w następujący sposób:

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

    Pamięć zajmowana przez strukturę jest odzyskiwane po wyjściu z zakresu.

Aby przydzielić struktury danych na stercie

  1. Użyj new polecenia , aby przydzielić struktury danych na stercie i delete cofnąć ich przydział, jak pokazano w poniższych przykładach:

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

Alokacja obiektu

Aby przydzielić obiekt na ramce

  1. Zadeklaruj obiekt w następujący sposób:

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

    Destruktor obiektu jest automatycznie wywoływany, gdy obiekt kończy jego zakres.

Aby przydzielić obiekt na stercie

  1. new Użyj operatora , który zwraca wskaźnik do obiektu, aby przydzielić obiekty na stercie. delete Użyj operatora , aby je usunąć.

    W poniższych przykładach stert i ramek przyjęto założenie, że CPerson konstruktor nie przyjmuje żadnych argumentów.

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

    Jeśli argumentem konstruktora CPerson jest wskaźnik do char, instrukcja alokacji ramek to:

    CMyClass myClass("Joe Smith");
    

    Instrukcja alokacji sterty to:

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

Zobacz też

Zarządzanie pamięcią: alokacja sterty