Sdílet prostřednictvím


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

V rámci své jméno z "zásobníku" nastavený přidělují při každém funkce se nazývá.Zásobníku je oblast paměti, která dočasně obsahuje argumenty funkce, jakož i všech proměnných, které jsou definovány místní funkce.Rámeček proměnné jsou často nazývány "automatické" proměnné, protože kompilátor automaticky přidělí místo pro ně.

Existují dva klíčové charakteristiky rozdělení rámce.Nejprve při definování místní proměnné dostatek je přiděleno místo v zásobníku pro uložení celé proměnné, i když je velkou řadu nebo datové struktury.Druhý snímek proměnné jsou automaticky odstraněna přesahují rozsah platnosti:

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

Pro místní funkce proměnné přechodu tohoto oboru se stane, když ukončí funkce, ale rozsah proměnné rámce může být menší než funkci, pokud vnořené složené závorky se používají.Toto automatické odstranění rámečku proměnné je velmi důležité.V případě jednoduché primitivní typy (například int nebo bajt), matice nebo datových struktur, automatické odstranění jednoduše získá paměti používané proměnné.Vzhledem k tomu, že proměnné dostal mimo obor, nelze přesto přistupovat.V případě objektů C++ však proces automatického odstranění je o něco složitější.

Pokud objekt je definován jako proměnné rámce, v místě, kde došlo k definici je automaticky vyvoláno jeho konstruktoru.Pokud objekt je mimo rozsah, je automaticky vyvoláno jeho destruktor, před paměť pro objekt je uvolněn.Tato automatická konstrukce a zničení může být velmi užitečné, ale musíte být vědomi automatické volání, zejména destruktoru.

Klíčovou výhodou rozdělování objektů na snímku je, že jsou automaticky odstraněny.Při přidělování objekty na snímku, nemusíte starat o zapomenuté objekty způsobuje nevracení paměti. (Další informace o nevracení paměti, naleznete v článku Detekce nevrácení paměti v knihovně MFC.) Rozdělení rámce nevýhodou je, že rámce proměnné nelze použít mimo jejich obor.Dalším faktorem při výběru rámečku přidělení versus přidělení haldy je, že pro rozsáhlé struktury a objekty, je často vhodnější použít haldy namísto zásobníku pro skladování od místa v zásobníku je často omezen.

Viz také

Koncepty

Správa paměti