Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Allokeringen i ramen tar namnet från den "stackram" som konfigureras när en funktion anropas. Stackramen är ett minnesområde som tillfälligt innehåller argumenten till funktionen samt eventuella variabler som definieras lokalt för funktionen. Ramvariabler kallas ofta för "automatiska" variabler eftersom kompilatorn automatiskt allokerar utrymmet för dem.
Det finns två viktiga egenskaper för ramallokeringar. När du definierar en lokal variabel allokeras först tillräckligt med utrymme på stackramen för att rymma hela variabeln, även om det är en stor matris eller datastruktur. För det andra tas ramvariabler bort automatiskt när de hamnar utanför omfånget:
void MyFunction()
{
   // Local object created on the stack
   CString strName;
   // Object goes out of scope and is deleted as function ends
}
För lokala funktionsvariabler sker den här omfångsövergången när funktionen avslutas, men omfånget för en ramvariabel kan vara mindre än en funktion om kapslade klammerparenteser används. Den här automatiska borttagningen av ramvariabler är mycket viktig. När det gäller enkla primitiva typer (till exempel eller int), matriser eller datastrukturer frigör den automatiska borttagningen helt enkelt det minne som  används av variabeln. Eftersom variabeln har gått utanför omfånget kan den ändå inte nås. När det gäller C++-objekt är dock processen för automatisk borttagning lite mer komplicerad.
När ett objekt definieras som en ramvariabel anropas konstruktorn automatiskt vid den punkt där definitionen påträffas. När objektet hamnar utanför omfånget anropas dess destruktor automatiskt innan minnet för objektet återtas. Denna automatiska konstruktion och förstörelse kan vara mycket praktiska, men du måste vara medveten om de automatiska anropen, särskilt till destruktor.
Den största fördelen med att allokera objekt på ramen är att de tas bort automatiskt. När du allokerar dina objekt på ramen behöver du inte oroa dig för glömda objekt som orsakar minnesläckor. (Mer information om minnesläckor finns i artikeln Detecting Memory Leaks in MFC.) En nackdel med ramallokering är att ramvariabler inte kan användas utanför deras omfång. En annan faktor vid val av ramallokering jämfört med heapallokering är att för stora strukturer och objekt är det ofta bättre att använda heapen i stället för stacken för lagring eftersom stackutrymmet ofta är begränsat.