Speicherverwaltung: Rahmenzuordnung
Zuordnung in den Frames erhält seinen Namen vom "Stapelrahmen" installiert wird, wenn eine Funktion aufgerufen wird. Der Stapelrahmen ist ein Speicherbereich, die vorübergehend die Argumente der Funktion enthält sowie weitere Variablen, die definierte lokale Variable der Funktion sind. Feldvariablen werden häufig "auto" Variablen aufgerufen, da der Compiler automatisch den Speicherplatz für sie.
Es gibt zwei Schlüsseleigenschaften von Framezuordnungen. Zuerst wenn Sie eine lokale Variable definieren, ist ausreichend Platz auf dem Stapelrahmen zugeordnet, um die gesamte Variable enthalten, selbst wenn ein großes Array oder eine Datenstruktur ist. Zweitens Framevariablen werden automatisch deaktiviert, wenn sie den Gültigkeitsbereich verlassen:
void MyFunction()
{
// Local object created on the stack
CString strName;
// Object goes out of scope and is deleted as function ends
}
Für lokale Funktionsvariablen geschieht dieser Bereichsübergang, wenn die Funktion abgeschlossen, aber der Gültigkeitsbereich einer Framevariable kann als eine Funktion kleiner sein, wenn geschachtelte geschweifte Klammern verwendet werden. Diese automatische Löschen von Framevariablen ist äußerst wichtig. Bei der einfachen primitiven Typen (wie int oder byte), sind Arrays oder Datenstrukturen, das automatische Löschen einfach den Speicher frei, der von der Variablen verwendet wird. Wenn die Variable den Gültigkeitsbereich erloschen ist, kann auf sie keine zur zugegriffen werden. Bei C++-Objekte jedoch ist der Prozess des automatischen Löschens ein bisschen komplizierter.
Wenn ein Objekt als Framevariable definiert wird, wird der Konstruktor automatisch am Punkt aufgerufen, in dem die Definition erreicht wird. Wenn das Objekt den Gültigkeitsbereich verlässt, wird ihr Destruktor automatisch aufgerufen, bevor der Speicher des Objekts freigegeben wird. Diese automatische Erstellung und Zerstörung können sehr zweckmäßig, müssen Sie jedoch die automatische Aufrufe, insbesondere den Destruktor berücksichtigen.
Der Hauptvorteil beim Verknüpfen von Objekten über den Frame ist, dass es automatisch gelöscht werden. Wenn Sie den Objekten über den Frame zuordnen, müssen Sie sich nicht um die vergessenen Objekte befürchten, die Speicherverluste verursachen. (Ausführliche Informationen zu Speicherverlusten, finden Sie im Artikel Erkennen von Speicherverlusten in MFC.) Ein Nachteil der Framezuordnung ist, dass Framevariablen nicht außerhalb des Bereichs verwendet werden können. Ein weiterer Faktor, wenn er Framezuordnung anhand Heapreservierung auswählt, ist der für große Strukturen und Objekte, ist es oft leichter, den Heap anstelle des Stapels zum Speichern zu verwenden, da Stapelspeicher oft eingeschränkt wird.