Delphi verwaltet den Speicher automatisch
Atomare Variablen in Delphi, wie z. B. Integer, Boolean, Record, Enumeration usw., werden vom Compiler automatisch für Speicher innerhalb des Gültigkeitsbereichs zugewiesen und automatisch freigegeben, wenn sie außerhalb des Gültigkeitsbereichs liegen. Darüber hinaus werden Strings, Varianten, dynamische Arrays und Schnittstellen automatisch freigegeben werden ebenfalls automatisch von Delphi verwaltet.
Diese Variablen werden alle auf dem Stapel gespeichert, mit Ausnahme der Schnittstellen. Darüber hinaus wird Variant manuell von Programmierern mit Funktionen wie VarArrayCreate erstellt; dynamische Arrays werden auch manuell von Programmierern mit Funktionen wie SetLength erstellt, aber in beiden Fällen müssen Programmierer es nicht selbst freigeben.
Darüber hinaus muss eine andere Art von Variable beachtet werden, nämlich eine mit Threadvar deklarierte Variable, deren Gültigkeitsbereich ein Thread ist. Dies wird hauptsächlich beim Schreiben von Thread-Funktionen verwendet, sodass jeder Thread einen Thread-lokalen Speicher verwendet.
Von Programmierern manuell verwalteter Speicher
Zeiger und Objekte erfordern, dass Programmierer manuell Speicher beantragen und freigeben.
Zu den Zeigern gehören PChar, Zeiger (untypisierter Zeiger), Datensatzzeiger, Variablenzeiger (zeigt auf atomare Variablen) und Funktionszeiger (z. B. Rückruffunktionen, unterteilt in globale Funktionen und Objektmethoden). Verwenden Sie die New-Funktion, um Speicher zu beantragen, und verwenden Sie Dispose, um den Zeiger freizugeben. Darüber hinaus sind GetMem, ReallocMem und FreeMem auch eine Reihe von Funktionen zum Anfordern und Freigeben von Speicher. Sie können die drei Speicherverwaltungsfunktionen von Delphi über die Funktionen GetMemoryManager und SetMemoryManager lesen und festlegen.
Zu den Objekten gehören Unterklassenobjekte, die von zwei Vererbungsbäumen, TObject und IUnknown, geerbt wurden. Objekte müssen mithilfe von Konstruktormethoden erstellt werden. Wenn Sie für ein Objekt, das mit einer Konstruktormethode erstellt wurde, keinen Eigentümer angeben (normalerweise „Create“, aber das ist möglicherweise nicht der Fall; der Compiler von Delphi erkennt nur das Schlüsselwort „constructor“), müssen Sie es manuell freigeben. Auch wenn Sie einen Eigentümer angeben. Sie müssen noch die tatsächliche Situation überprüfen. Es muss zu einem bestimmten Zeitpunkt freigegeben werden. Im Allgemeinen wird die Free-Methode für die Freigabe verwendet (IUnknown erfordert keine manuelle Freigabe). Eine bessere Methode ist die Verwendung von FreeAndNil (in der Sysutils.pas-Einheit), die nicht nur den belegten Speicher, sondern auch den Zeiger selbst freigibt.
Diese Variablen werden im Heap gespeichert. Ein weiteres Problem, das Aufmerksamkeit erfordert, besteht darin, dass die Zeiger in TList vom Programmierer selbst freigegeben werden müssen.
Notiz:
1. Die Callback-Funktion gehört nicht zum technischen Umfang der Speicherverwaltung. Einzelheiten finden Sie im Abschnitt „Zeiger“.
2. Einzelheiten zum Objekt finden Sie im Abschnitt „Objektmodell“.
3. Wenn ein Zeiger an mehreren Stellen verwendet wird und eine dieser Stellen freigegeben wird, tritt eine Ausnahme auf, wenn er an anderen Stellen verwendet wird. Dies ist ein Problem, das bei der Verwendung von Zeigern beachtet werden sollte. Ausführliche Informationen zum Speicher finden Sie im Abschnitt „Zeiger“.
4. Das Übergeben von Zeigern hat zwei offensichtliche Vorteile: Speicher sparen und Geschwindigkeit verbessern. Ausführliche Informationen zum Speicher finden Sie in den Abschnitten „Zeiger“ und „Designtipps“.
5. Wie man Objekte und Zeiger beurteilt, ist ein sehr technisches Thema. Es gibt einige Beiträge zu diesem Thema auf csdn. Sie können sich auch einen Artikel von Aimingoo ([email protected]) mit dem Titel „Über „Wie erkennt man einen Zeiger“ ansehen? ist Artikel „Ausführliche Diskussion des Objekts“. Ausführliche Informationen zum Speicher finden Sie in den Abschnitten „Zeiger“ und „Objekt“.
Abgeschlossen am 19.01.2004 .
Alle Rechte vorbehalten. Bitte korrigieren Sie unangemessene Kommentare.