Speicherverwaltung: Rahmenzuordnung
Die Zuordnung für den Frame verwendet seinen Namen aus dem "Stapelframe", der immer dann eingerichtet wird, wenn eine Funktion aufgerufen wird. Der Stapelframe ist ein Speicherbereich, der vorübergehend die Argumente für die Funktion sowie alle Variablen enthält, die lokal für die Funktion definiert sind. Framevariablen werden häufig als "automatische" Variablen bezeichnet, da der Compiler automatisch den Platz für sie zuweist.
Es gibt zwei hauptmerkmale von Framezuordnungen. Wenn Sie eine lokale Variable definieren, wird genügend Platz auf dem Stapelframe zugewiesen, um die gesamte Variable zu halten, auch wenn es sich um ein großes Array oder eine Datenstruktur handelt. Zweitens werden Framevariablen automatisch gelöscht, wenn sie außerhalb des Gültigkeitsbereichs liegen:
void MyFunction()
{
// Local object created on the stack
CString strName;
// Object goes out of scope and is deleted as function ends
}
Bei lokalen Funktionsvariablen erfolgt dieser Bereichsübergang, wenn die Funktion beendet wird. Der Bereich einer Framevariable kann jedoch kleiner als eine Funktion sein, wenn geschachtelte geschweifte Klammern verwendet werden. Diese automatische Löschung von Framevariablen ist sehr wichtig. Bei einfachen Primitiventypen (zint
. B. Byte), Arrays oder Datenstrukturen gibt die automatische Löschung einfach den von der Variablen verwendeten Speicher frei. Da die Variable nicht mehr im Gültigkeitsbereich ist, kann trotzdem nicht darauf zugegriffen werden. Im Fall von C++-Objekten ist der Prozess der automatischen Löschung jedoch etwas komplizierter.
Wenn ein Objekt als Framevariable definiert ist, wird der Konstruktor automatisch an dem Punkt aufgerufen, an dem die Definition gefunden wird. Wenn das Objekt außerhalb des Gültigkeitsbereichs liegt, wird der Destruktor automatisch aufgerufen, bevor der Speicher für das Objekt erneut beansprucht wird. Diese automatische Konstruktion und Zerstörung kann sehr praktisch sein, aber Sie müssen sich der automatischen Aufrufe, insbesondere der Destruktor, bewusst sein.
Der hauptvorteil der Zuordnung von Objekten auf dem Frame besteht darin, dass sie automatisch gelöscht werden. Wenn Sie Ihre Objekte auf dem Frame zuordnen, müssen Sie sich keine Gedanken über vergessene Objekte machen, die Speicherverluste verursachen. (Ausführliche Informationen zu Speicherlecks finden Sie im Artikel Erkennen von Speicherlecks in MFC.) Ein Nachteil der Framezuordnung besteht darin, dass Framevariablen nicht außerhalb ihres Bereichs verwendet werden können. Ein weiterer Faktor bei der Auswahl der Framezuordnung im Vergleich zur Heap-Zuordnung besteht darin, dass es für große Strukturen und Objekte häufig besser ist, den Heap anstelle des Stapels für den Speicher zu verwenden, da Stapelplatz häufig begrenzt ist.