Sdílet prostřednictvím


Správa paměti: Přidělení rámců

Přidělení rámce přebírá jeho název z "rámce zásobníku", který je nastaven při každém zavolání funkce. Rámec zásobníku je oblast paměti, která dočasně obsahuje argumenty funkce a také všechny proměnné, které jsou definované místně pro funkci. 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 místní funkce dojde k tomuto přechodu oboru 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í proměnných rámců je velmi důležité. V případě jednoduchých primitivních typů (například int bajtů), 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 zmizí z oboru, jeho destruktor se automaticky vyvolá před uvolněním paměti objektu. Tato automatická konstrukce a zničení může být velmi užitečné, ale musíte vědět o automatických voláních, zejména pro destruktor.

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

Viz také

Správa paměti