![]() |
Speicherfreigabe bei Kürzung eines dynamischen Arrays
Hi
Beispiel:
Code:
Wird jetzt der Speicherbereich, der durch list[4] verwendet wurde, automatisch wieder freigegeben?
type
rec_test = record name:string; end; var list:array of rec_test; procedure test() begin // Größe des Arrays setzen setLength(list,5); // Array mit Werten füllen list[0].name:='Asterix'; list[1].name:='Obelix'; list[2].name:='Idefix'; list[3].name:='Automatix'; list[4].name:='Miraculix'; // jetzt testweise die Liste kürzen setLength(list,4); end; Danke |
AW: Speicherfreigabe bei Kürzung eines dynamischen Arrays
In dem Fall ja. Anders verhält es sich, wenn es sich um Pointer oder Objektinstanzen handeln würde, die müsstest Du händisch freigeben.
|
AW: Speicherfreigabe bei Kürzung eines dynamischen Arrays
Ah, vielen Dank. So eine Antwort hatte ich erhofft. Das mit der Freigabe von Objektinstanzen wußte ich. Mache ich immer mit FreeAndNil(obj).
Und bei der Speicherfreigabe von Zeigern meinst Du bestimmt dispose(irgendeinZeiger). |
AW: Speicherfreigabe bei Kürzung eines dynamischen Arrays
Ganz genau. Alles, wofür Du Speicher anfordern musst (.Create, GetMem, AllocMem, New) musst Du auch wieder freigeben, wenn Du das Array verkleinerst.
|
AW: Speicherfreigabe bei Kürzung eines dynamischen Arrays
Wobei ggf. noch anzumerken ist, dass der Speicher für das tatsächliche Plätzchen im Array nicht unmittelbar an Windows zurück gegeben wird, sondern der Delphi-MM diesen vorerst einbehält, um ihn später anderweitig ggf. schnell wiederverwenden zu können, ohne ein neues malloc() auszuführen. (Das könnte auch für den vom String belegten Platz gelten.) Daher ist es gut möglich, und kein Fehler, dass man dieses "Freigeben" nicht im Taskmanager sieht, da dein Programm aus Sicht von Windows diesen noch immer belegt. Er ist halt intern nur als frei markiert.
|
AW: Speicherfreigabe bei Kürzung eines dynamischen Arrays
Das Prinzip kenne ich irgendwoher. Nennt sich das nicht Memory-Shadowing?
Der eigentlich freigegebene Speicher wird von dem Programm nicht an Windows zurückgegeben, weil eine erneute Speicheranforderung durch das OS Zeit kosten würde. Das hatte ich mal im Zusammenhang mit 3D-Engines gelesen. |
AW: Speicherfreigabe bei Kürzung eines dynamischen Arrays
Zitat:
Gruß hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz