Sdílet prostřednictvím


Správa paměti: Alokace bloku

Alokace na rámci získává svůj název ze "zásobníkového rámce", který je nastaven při každém zavolání funkce. Zásobníkový rámec je oblast paměti, která dočasně uchovává argumenty funkce a lokálně definované proměnné funkce. Proměnné rámce se často nazývají "automatické" proměnné, protože kompilátor automaticky přiděluje prostor pro ně.

Existují dvě klíčové charakteristiky přidělování rámců. Za prvé, když definujete místní proměnnou, je na rámečku zásobníku přiděleno dostatek místa pro uložení celé proměnné, i když se jedná o velkou matici nebo datovou strukturu. Za druhé, proměnné rámce se automaticky odstraní, když vyjdou mimo rozsah:

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

U proměnných lokální funkce dojde k této změně rozsahu při ukončení funkce, ale rozsah proměnné rámce může být menší než funkce, pokud se použijí vnořené složené závorky. Toto automatické odstranění rámcových proměnných je velmi důležité. V případě jednoduchých primitivních typů (například intbajtů), polí nebo datových struktur automatické odstranění jednoduše uvolní paměť používanou proměnnou. Vzhledem k tomu, že proměnná přestala být oborem, není k ní možné získat přístup. V případě objektů jazyka C++ je však proces automatického odstranění trochu složitější.

Pokud je objekt definován jako proměnná rámce, jeho konstruktor se automaticky vyvolá v okamžiku, kdy je definice zjištěna. Když objekt jde mimo rozsah, jeho destruktor je automaticky vyvolán před uvolněním paměti přidělené objektu. Tato automatická konstrukce a destrukce může být velmi užitečná, ale musíte vědět o automatických voláních, zejména u destruktoru.

Klíčovou výhodou přidělování objektů v rámci je, že se automaticky odstraní. Když přidělíte objekty v rámci, nemusíte se starat o zapomenuté objekty, které způsobují úniky paměti. (Podrobnosti o únicích paměti naleznete v článku Zjišťování úniků paměti v prostředí MFC.) Nevýhodou alokace rámce je, že rámcové proměnné nelze použít mimo jejich rozsah. Dalším faktorem při volbě mezi alokací rámce a alokací haldy je, že pro velké struktury a objekty je často lepší použít haldu místo zásobníku pro uložení, protože prostor zásobníku bývá často omezený.

Viz také

správy paměti