Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#37

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 20. Aug 2010, 01:42
Windows weist dem virtuellen Addressraum des Prozesses reellen Speicher zu, wenn eswas angefordert wird (MSDN-Library durchsuchenVirtualAlloc und Co.)
und beim Beendes des Prozesses werden diese Zuweisungen einfach wieder freigegeben, es sei denn man hat den Speicher ge-shared und andere Prozesse haben auch noch eine Zuweisung ... Windows weiß also was welchem Prozess zugewiesen wurde.

SetLength führt Finalize/FinalizeArray und Initialize/InitializeArray für alle reservierten und freizugebenden Arrayfelder aus.
dynamische Arrays besitzen eine automatischen Speicherverwaltung/Initialisierung (ebenso wie Strings und Interfaces).
Wenn man also bei einem mehrdimensionalen Array das äußere Array freigibt, dann werden über Finalize die untergeordneten Arrays mit freigegeben.


Wärend der Programmlaufzeit muß man sich also "nur" um die nicht automatisch behandelten Speicheranfragen kümmer, wie Pointer und Objekte.

Wird ein Prozess beendet, dann räumt Windows auf ... gerade deswegen wurde ja mit der WinNT-Serie die virtuelle Speicherverwaltung eingeführt.
- Windows weiß wem was gehört und kann damit auch ordentlich aufräumen
- Prozesse haben getrennte Speicherräume und können sich nicht einfach gegenseitig beeinflussen (früher konnte ein BufferOverrun auch schonmal einen fremden Prozess schrotten und nicht nur den Eigenen).
$2B or not $2B
  Mit Zitat antworten Zitat