Udostępnij za pośrednictwem


Zarządzanie pamięcią: alokacja ramek

Alokacji na ramce zawdzięcza swoją nazwę "ramek stosu", który znajduje się zawsze, gdy funkcja jest wywoływana.Ramki stosu jest obszarem pamięci, która tymczasowo przechowuje argumenty funkcji, jak również wszelkie zmienne, które są zdefiniowane lokalne do funkcji.Zmienne ramki są często nazywane "Automatyczny" zmiennych, ponieważ kompilator automatycznie przydziela miejsce dla nich.

Istnieją dwa główne cechy alokacje ramki.Po pierwsze podczas definiowania zmiennej lokalnej, za mało miejsca jest przydzielany dla ramek stosu, aby pomieścić całą zmiennej, nawet jeśli jest szeroki wybór lub struktury danych.Po drugie zmienne ramki są automatycznie usuwane podczas wykroczenia poza zakres:

void MyFunction()
{
    // Local object created on the stack
    CString strName;
    // Object goes out of scope and is deleted as function ends
}

Dla zmiennych lokalnych funkcji to przejście zakres dzieje się podczas wyjścia funkcji, ale zasięg zmiennej ramki może być mniejszy niż funkcja, jeśli używane są zagnieżdżone nawiasy klamrowe.Bardzo ważne jest to automatyczne usuwanie zmiennych ramki.W przypadku prostych typów pierwotnych (takie jak int lub bajt), tablicami lub struktur danych, automatyczne usuwanie po prostu ilość pamięci używanej przez zmienną.Ponieważ zmienna skończyła się zakres, nie są dostępne w każdym razie.W przypadku obiektów języka C++ jednak proces automatycznego usuwania jest nieco bardziej skomplikowane.

Gdy obiekt jest zdefiniowany jako zmienna ramki, jego konstruktora jest wywoływany automatycznie w momencie, gdy napotkał definicji.Kiedy obiekt wykracza poza zakres, jego destruktora jest automatycznie wywoływane przed regeneracji pamięci dla obiektu.To automatyczne budowy i niszczenia może być bardzo przydatne, ale muszą być świadomi automatyczne połączenia, zwłaszcza z destruktor.

Przydzielanie obiektów na ramkę kluczową zaletą jest, że są automatycznie usuwane.Podczas alokowania obiekty na klatce, nie trzeba martwić się o zapomniane obiekty przyczyną przecieków pamięci. (Aby uzyskać szczegółowe informacje na przecieki pamięci, zobacz artykuł Wykrywania przecieków pamięci w MFC.) Wadą alokacji ramki jest, że ramki zmiennych nie można używać poza ich zakres.Innym czynnikiem w wyborze ramki alokacji i Alokacja sterty jest dla dużych struktur i obiektów, to często lepiej używać sterty zamiast stosu do składowania, że obszar stosu często jest ograniczona.

Zobacz też

Koncepcje

Zarządzanie pamięcią