AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Lokale Arrays mit SetLength(0) freigeben oder nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

Lokale Arrays mit SetLength(0) freigeben oder nicht?

Ein Thema von Zacherl · begonnen am 3. Mai 2010 · letzter Beitrag vom 4. Mai 2010
 
Benutzerbild von himitsu
himitsu

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

Re: Lokale Arrays mit SetLength(0) freigeben oder nicht?

  Alt 4. Mai 2010, 08:36
Nee, stimmt schon. dyn Arrays werden automatisch freigegeben.

Delphi initialisiert es quasi mit der Länge 0.

SetLength Reallociert dieses nur.

Delphi-Quellcode:
procedure Test;
var a: array of Integer;
begin
  SetLength(a, 1);
end;
Code:
Unit3.pas.27: begin
004A0E24 55               push ebp
004A0E25 8BEC            mov ebp,esp
004A0E27 6A00             push $00    // a := nil;  aka  SetLength(a, 0);
004A0E29 33C0             xor eax,eax             // try
004A0E2B 55               push ebp                //
004A0E2C 686B0E4A00       push $004a0e6b          //
004A0E31 64FF30           push dword ptr fs:[eax] //
004A0E34 648920           mov fs:[eax],esp        //

Unit3.pas.28: SetLength(a, 1);
004A0E37 6A01             push $01
004A0E39 8D45FC          lea eax,[ebp-$04]
004A0E3C B901000000       mov ecx,$00000001
004A0E41 8B15000E4A00     mov edx,[$004a0e00]
004A0E47 E87C71F6FF      call @DynArraySetLength
004A0E4C 83C404           add esp,$04

Unit3.pas.29: end;
004A0E4F 33C0             xor eax,eax
004A0E51 5A              pop edx
004A0E52 59               pop ecx
004A0E53 59               pop ecx
004A0E54 648910           mov fs:[eax],edx    // finally
004A0E57 68720E4A00       push $004a0e72       //
004A0E5C 8D45FC          lea eax,[ebp-$04]   //
004A0E5F 8B15000E4A00     mov edx,[$004a0e00] //
004A0E65 E86A71F6FF      call @DynArrayClear //   SetLength(a, 0);
004A0E6A C3               ret                 // end;
004A0E6B E91849F6FF      jmp @HandleFinally  //
004A0E70 EBEA            jmp $004a0e5c       //
004A0E72 59               pop ecx             //
004A0E73 5D              pop ebp             //
004A0E74 C3               ret                 //
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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