Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Speicherplatz eines Arrays freigeben


Mari - Sa 08.02.03 12:24
Titel: Speicherplatz eines Arrays freigeben
Kann ich den Speicherplatz den ein Array belegt während das Programm läuft wieder freigeben wenn ich die Werte nicht mehr brauche? Es ist bestimmt nicht gerade geschwindigkeitsfördernd wenn sich während des gesamten Programablaufes ein Array mit 100.000 Real-Werten imSpeicher befindet, oder macht das nichts aus?


smiegel - Sa 08.02.03 15:16

Hallo,

wenn Du das Array dynamisch erzeugt hast, dann kannst Du auch den Speicher wieder freigeben.


Möglichkeit 1:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type
  TMyArray=array of Double;

var
  DblArr:TMyArray;

  ...
  // array mit 100000 Werten initialisieren
  SetLength(DblArr, 100000);
  ...
  // array wieder freigeben
  SetLength(DblArr, 0);


Möglichkeit 2:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type
  PMyArray=^TMyArray;
  TMyArray=array[1..100000] of Double;

var
  DblArr:PMyArr;

  ...
  // array initialisieren
  New(DblArr);
  ...
  // Speicher wieder freigeben
  Dispose(DblArr);


Mari - Sa 08.02.03 16:57

Und wenn das Array nicht dynamisch ist?


Delete - Sa 08.02.03 17:06

Siehe Möglichkeit 2.


Mari - Sa 08.02.03 17:26

Ich will euch ja nicht ärgern, aber bei meinem Array ist die erste Dimension dynamisch und die zweite und dritte nicht :wink:


smiegel - So 09.02.03 09:12

Hallo Mari,

ich verstehe Deine Frage nicht ganz, vermute aber einmal, Du meinst so oder so ähnlich?


Quelltext
1:
2:
3:
type
  TStatischArr=array[1..10, 1..10] of Double;
  TDynArr=array of TStatischArr;


Wenn dem so ist, siehe Möglichkeit 1.


Mari - So 09.02.03 18:01

Ich meine es so:

Quelltext
1:
var x: Array of Aray[1..100,1..100] of double                    


HeLe - Mo 17.02.03 16:31

einfach setlength(x,0)


Mari - Mo 17.02.03 18:23

Damit kann ich die erste Dimension löschen. Aber die zweite und dritte?


AndyB - Mo 17.02.03 18:26

Wird automatisch mit freigegeben (RTTI [Runtime Type Information] sei dank).


Mari - Mo 17.02.03 19:31

Das heißt also mit

Quelltext
1:
setlength(x,0)                    

werden alle drei Dimensionen wieder freigegeben?


AndyB - Mo 17.02.03 19:39

Ja.