Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pointer SizeOf (https://www.delphipraxis.net/86336-pointer-sizeof.html)

3_of_8 12. Feb 2007 21:18

Re: Pointer SizeOf
 
Zitat:

Zitat von dr. love
also hab ich keine chance an die größe des aktuell belegten speichers zu kommen oder wie is das?

Also wenn du den gesamten Speicher haben willst, kannst du das benutzen (hab ich schnell gebastelt)

Delphi-Quellcode:
function GetAllocatedHeap: Integer;
begin
  Result:=GetHeapStatus.TotalAllocated;
end;
Die Größe einer Klasse kriegst du mit Delphi-Referenz durchsuchenTObject.InstanceSize. Die eines dynamischen Arrays berechnest du einfach, indem du die Länge mit der Größe des Typen multiplizierst. Die eines dynamischen Strings einfach mit length().

Robert Marquardt 13. Feb 2007 07:15

Re: Pointer SizeOf
 
Zitat:

Zitat von dr. love
Also, mit SizeOf() kann man ja die Größe einer Variable oder den von einem Zeiger reservierten/eingenommenen Speicherplatz herausbekommen.

Falsch.
SizeOf hat mit dynamisch alloziiertem Speicher nichts am Hut. SizeOf() liefert die Groesse eines Typs oder einer Variable. Es wird zur Compile-Zeit ausgerechnet. SizeOf(Pointer) ist also immer 4 egal wohin der Zeiger zeigt.
Auch Methoden-Zeiger haben die Groesse 4. Sie zeigen nur auf ein Record das zwei weitere Zeiger enthaelt. Dieses Record hat dann die Groesse 8.

Hawkeye219 13. Feb 2007 07:56

Re: Pointer SizeOf
 
Hallo Robert,

Zitat:

Zitat von Robert Marquardt
Auch Methoden-Zeiger haben die Groesse 4. Sie zeigen nur auf ein Record das zwei weitere Zeiger enthaelt. Dieses Record hat dann die Groesse 8.

Andreas sieht das offenbar anders.

Gruß Hawkeye

dr. love 13. Feb 2007 08:37

Re: Pointer SizeOf
 
Hmmm... ich glaub ihr kommt grad vom Thema weg... :zwinker:

3_of_8 13. Feb 2007 12:48

Re: Pointer SizeOf
 
Zitat:

Zitat von Robert Marquardt
Zitat:

Zitat von dr. love
Also, mit SizeOf() kann man ja die Größe einer Variable oder den von einem Zeiger reservierten/eingenommenen Speicherplatz herausbekommen.

Falsch.
SizeOf hat mit dynamisch alloziiertem Speicher nichts am Hut. SizeOf() liefert die Groesse eines Typs oder einer Variable. Es wird zur Compile-Zeit ausgerechnet. SizeOf(Pointer) ist also immer 4 egal wohin der Zeiger zeigt.
Auch Methoden-Zeiger haben die Groesse 4. Sie zeigen nur auf ein Record das zwei weitere Zeiger enthaelt. Dieses Record hat dann die Groesse 8.

Probiers mit sizeof aus. Ein Methodenzeiger hat 8 Byte, 4 Byte für die Instanz, 4 Byte für die Methodenadresse.

Robert Marquardt 13. Feb 2007 13:06

Re: Pointer SizeOf
 
Das ist nicht der Methodenzeiger, sondern das Record selbst. Es besteht also nur eine begriffliche Verwirrung.

dr. love 13. Feb 2007 13:23

Re: Pointer SizeOf
 
öhm, also sizeof liefert definitiv nicht den tatsächlcih belegten speicher zurück, sonst hätte ich dir frage ja niemals im forum stellen müssen... aber das is ja nu auch wurscht, man kann ja mit ein bissl mehraufwand ausrechnen wieviel speicher belegt wird (einfach die new/dispose vorgänge zusammenrechnen)

3_of_8 13. Feb 2007 18:51

Re: Pointer SizeOf
 
*hüstel*

http://www.delphipraxis.net/internal...=680958#680958

Da kannst du sämtlichen belegten Speicher mit der Funktion, die ich da geschrieben habe, ermitteln.

dr. love 13. Feb 2007 20:35

Re: Pointer SizeOf
 
huuups... hatte ich mal wieder ganz übersehen. aber ermittelt das auch nur den von meiner anwendung belgetn speicher oder den ges geamten systems? (wenn ichs ausprobiert hätte eüßt ichs schon, aber ein programmierer darf auch faul sein^^)
danke nochma für den verweis :wink:

3_of_8 13. Feb 2007 20:39

Re: Pointer SizeOf
 
Natürlich nur den von deiner.

EDIT: Und auch nur den Heap, nicht den Stack.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 Uhr.
Seite 2 von 3     12 3      

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