Udostępnij za pośrednictwem


Zarządzanie pamięcią: Ramka alokacji

W ramce rozdysponowane jego nazwę z "ramki stosu", która jest ustawiony w momencie wywoływana jest funkcja.Ramka stosu jest obszarem pamięci, która tymczasowo przechowuje argumenty funkcji, jak również wszelkie zdefiniowane zmienne 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 na jest przydzielana ramek stosu do przechowywania zmiennej całym nawet jeśli jest dużej tablicy lub struktury danych.Po drugie zmienne ramki są automatycznie usuwane podczas wykraczają poza zakresem:

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 się dzieje, gdy 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.Z prostych typów pierwotnych (takie jak int lub bajt), tablice lub struktur danych automatycznego usuwania ta po prostu pamięć używaną przez zmienną.Ponieważ zmienna udał się poza zakresem, nie są dostępne mimo to.W odniesieniu do obiektów C++ jednak proces automatycznego usuwania jest trochę bardziej skomplikowane.

Gdy obiekt jest zdefiniowany jako zmienna ramki, jego konstruktora jest automatycznie wywoływane w punkcie, w którym napotka definicji.Gdy obiekt wykracza poza zakres, jego destruktora automatycznie jest wywoływane przed odzyskane w pamięci dla obiektu.To automatyczne budowy i niszczenia może być bardzo przydatne, ale muszą być świadomi wywołań automatycznych, szczególnie destruktor.

Przydzielanie obiektów na ramkę kluczową zaletą jest, że są automatycznie usuwane.Podczas alokowania obiekty w ramce nie trzeba się martwić o obiekty zapomniane przyczyną przecieków pamięci.(Szczegółowe informacje na temat przecieki pamięci, zobacz artykuł Wykrywania przecieki pamięci w MFC.) Wadą alokacji ramki jest, że ramki zmiennych nie można używać poza ich zakres.Innym czynnikiem wybierając ramki alokacji i Alokacja sterty jest, że dla dużych struktur i obiektów, często lepszym rozwiązaniem jest używany sterty zamiast stosu w magazynie, ponieważ obszar stosu często jest ograniczona.

Zobacz też

Koncepcje

Zarządzanie pamięcią