Delphi-PRAXiS
Seite 1 von 3  1 23      

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)

dr. love 12. Feb 2007 21:11


Pointer SizeOf
 
Vielleicht bin ich ja total dumm im Kopf, aber ich hätt da mal ne Grundlagenfrage zum Thema Zeiger

Also, mit SiteOf() kann man ja die Größe einer Variable oder den von einem Zeiger reservierten/eingenommenen Speicherplatz herausbekommen. Bei mir liefert SizeOf aber das gleiche Ergebnis für folgendes zurück:

1. der Zeiger wurde zwar definiert, für ihn aber kein Speicher auf dem Heap (mit New() und Dispose()) angelegt

2. der Zeiger wurde definiert, der Speicher auf dem Heapt angelegt und in diesen Speicher geschrieben

Das kann doch eigentlich gar nicht sein oder? Im ersten Fall müsste der Zeiger doch auf NIL zeigen, also SizeOf() 0 zurückgeben... sonst könnte man ja gleich Variabelen benutzen, wenn Zeiger immer schon bei ihrer deklaration Speicher reservieren...

So liefern aber 1. und 2. das gleiche Ergebnis (in meinem Fall 12 (Byte)) zurück

mkinzler 12. Feb 2007 21:14

Re: Pointer SizeOf
 
SizeoOf betrachtet nicht den wirklich belegten Speicher, sondern den Speicher der eine Struktur, wenn sie erzeugt wird.

3_of_8 12. Feb 2007 21:16

Re: Pointer SizeOf
 
Normalerweise hat ein Zeiger 4 Byte, wenns ein Methodenzeiger ist 8 Byte.

dr. love 12. Feb 2007 21:18

Re: Pointer SizeOf
 
ersma vielen dank für die wie immer kompetente hilfe!

...und ich dachte schon ich bin total doof un hab irgendwas falsch definiert... wie kann ich den tatsächlich belegten speicher herausbekommen?

da muss es doch auch nen befehl für geben oder???

mkinzler 12. Feb 2007 21:20

Re: Pointer SizeOf
 
Du kannst nur auf Nil Prüfen und hoffen, das richtig freigegeben wurde (FreeAndNil)

dr. love 12. Feb 2007 21:21

Re: Pointer SizeOf
 
aber dann weiß ich ja nicht, wieviel speicher momentan auf dem heap belegt wird... un das wollt ich nu eigentlich wissen, ohne es ausrechnen zu müssen

dr. love 12. Feb 2007 21:34

Re: Pointer SizeOf
 
also hab ich keine chance an die größe des aktuell belegten speichers zu kommen oder wie is das?

Hawkeye219 12. Feb 2007 21:47

Re: Pointer SizeOf
 
Hi,

wenn du einen typisierten Zeiger p hast, dann liefert dir SizeOf(p) die Größe des Zeigers (4 Byte) und SizeOf(p^) die Größe des Speicherbereichs, auf den der Zeiger verweist.

Delphi-Quellcode:
type
  PStructure = ^TStructure;
  TStructure = record
    i, j, k : Integer;
  end;

var
  p : PStructure;
  size : Integer;

begin
  p := nil;
  size := SizeOf(p);  // size = 4
  size := SizeOf(p^); // size = 12
end;
Es spielt dabei keine Rolle, ob der Zeiger initialisiert wurde oder nicht. Der Compiler kennt aufgrund der Typvereinbarungen die Größe der Speicherblöcke und setzt die entsprechenden Werte ein.

Gruß Hawkeye

dr. love 12. Feb 2007 21:49

Re: Pointer SizeOf
 
alles klar, das heißt also, dass ich niemals den tatsächlich belegten speicher zurückgeliefert bekomme... naja, auch nich sooo schlimm

danke für all eure antworten!

Hawkeye219 12. Feb 2007 21:53

Re: Pointer SizeOf
 
Zitat:

Zitat von dr. love
alles klar, das heißt also, dass ich niemals den tatsächlich belegten speicher zurückgeliefert bekomme

Es kommt darauf an, was du unter "belegt" verstehst. Wenn der Speicher mit New() angefordert wurde, dann ist er belegt. Ob er sinnvolle Werte enthält, weiß nur der Programmierer.

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 Uhr.
Seite 1 von 3  1 23      

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 by Thomas Breitkreuz