AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer SizeOf

Ein Thema von dr. love · begonnen am 12. Feb 2007 · letzter Beitrag vom 14. Feb 2007
Antwort Antwort
Seite 1 von 3  1 23      
dr. love

Registriert seit: 10. Jan 2007
92 Beiträge
 
#1

Pointer SizeOf

  Alt 12. Feb 2007, 20:11
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Pointer SizeOf

  Alt 12. Feb 2007, 20:14
SizeoOf betrachtet nicht den wirklich belegten Speicher, sondern den Speicher der eine Struktur, wenn sie erzeugt wird.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Pointer SizeOf

  Alt 12. Feb 2007, 20:16
Normalerweise hat ein Zeiger 4 Byte, wenns ein Methodenzeiger ist 8 Byte.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
dr. love

Registriert seit: 10. Jan 2007
92 Beiträge
 
#4

Re: Pointer SizeOf

  Alt 12. Feb 2007, 20:18
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???
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Pointer SizeOf

  Alt 12. Feb 2007, 20:20
Du kannst nur auf Nil Prüfen und hoffen, das richtig freigegeben wurde (FreeAndNil)
Markus Kinzler
  Mit Zitat antworten Zitat
dr. love

Registriert seit: 10. Jan 2007
92 Beiträge
 
#6

Re: Pointer SizeOf

  Alt 12. Feb 2007, 20:21
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
  Mit Zitat antworten Zitat
dr. love

Registriert seit: 10. Jan 2007
92 Beiträge
 
#7

Re: Pointer SizeOf

  Alt 12. Feb 2007, 20:34
also hab ich keine chance an die größe des aktuell belegten speichers zu kommen oder wie is das?
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Pointer SizeOf

  Alt 12. Feb 2007, 20:47
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
  Mit Zitat antworten Zitat
dr. love

Registriert seit: 10. Jan 2007
92 Beiträge
 
#9

Re: Pointer SizeOf

  Alt 12. Feb 2007, 20:49
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!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Pointer SizeOf

  Alt 12. Feb 2007, 20:53
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz