Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Speicherbedarf Datenverbund? (https://www.delphipraxis.net/133356-speicherbedarf-datenverbund.html)

Lotus 30. Apr 2009 05:37


Speicherbedarf Datenverbund?
 
Servus,

ich habe folgende Typdeklartionen:

Delphi-Quellcode:
type tpointer=^tdaten;
tdaten=record
name:string[10];
next:tpointer;
end;
Für mich wären dies ein Speicherbedarf von 15Byte (11 für String+4Byte für den Pointer)

Delphi gibt mir allerdings per sizeof(tdaten) eine größe von 16 Byte aus... warum?
Bzw. welches Ergebnis ist nun richtig?

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

mkinzler 30. Apr 2009 05:40

Re: Speicherbedarf Datenverbund?
 
Es wird auf auf Word-Grenzen ausgerichtet. 15Bytes wäre es bei packed

Lotus 30. Apr 2009 05:46

Re: Speicherbedarf Datenverbund?
 
Kann ich sizeof so einstellen das es nur packed ausgibt? bzw. wo is der unterschied von packed?

alzaimar 30. Apr 2009 06:05

Re: Speicherbedarf Datenverbund?
 
Das Schlüsselwort 'packed' weist den Compiler an, die Felder bytegenau anzuordnen. Dann ist der Zugriff aber etwas langsamer. Ohne diesen Zusatz werden die Felder (aus Gründen der Performance) -wie mkinzler schon sagte- 16bit-weise angeordnet.

'SizeOf' kann man nicht 'einstellen' :gruebel:

Lotus 30. Apr 2009 06:11

Re: Speicherbedarf Datenverbund?
 
Gäbe es noch eine andere Methode den Speicherbedarf (packed) auszugeben?

mkinzler 30. Apr 2009 06:30

Re: Speicherbedarf Datenverbund?
 
Was gefällt dir an packed nicht?
Warum ist die das eine Byte so wichtig?

guidok 30. Apr 2009 07:51

Re: Speicherbedarf Datenverbund?
 
Zitat:

Zitat von Lotus
Gäbe es noch eine andere Methode den Speicherbedarf (packed) auszugeben?

Ich glaube du missverstehst hier etwas. Es geht nicht um die Ausgabe des Speicherbedarfes, denn der wird so wie du den Record deklariert hast richtig ausgegeben. Du müsstest deinen Record anders deklarieren:

Delphi-Quellcode:
tdaten = packed record
  name : string[10];
  next : tpointer;
end;
Auf diese Weise wird der Speicher anders angeordnet (eben nicht mehr wortweise) und der Speicherbedarf ändert sich entsprechend. Geht, wie schon von den Vorrednern geschrieben, etwas zu Lasten der Performance.

Bernhard Geyer 30. Apr 2009 08:00

Re: Speicherbedarf Datenverbund?
 
Zitat:

Zitat von alzaimar
-wie mkinzler schon sagte- 16bit-weise angeordnet.

Die Ausrichtung kann schon lange auf 1/2/4 oder 8 Byte eingestellt werden (Projektoptionen/Compiler/Codeerzeugung -> Ausrichtung von Record-Felder).
Bei neueren Delphi-Versionen ist hier der Default-Wert 8 Byte. Dies ist auch für neuerer Prozessoren (Pentium (?) und neuer) auch besser da hier die Prozessorarchitektur schon auf 64-Bit Speicherzugriff ausgerichtet ist).

himitsu 30. Apr 2009 08:51

Re: Speicherbedarf Datenverbund?
 
Zitat:

Zitat von Lotus
Delphi gibt mir allerdings per sizeof(tdaten) eine größe von 16 Byte aus... warum?

Weil Delphi es per alles Standard so ausrichtet, daß der Zugrigg optimaler Weise an Integergrenzen beginnt und auch die ganze Datenstruktur als vielfaches von Integern auftritt, also sich über ganze Integer-Operationen zu kopieren läßt.

Zitat:

Zitat von alzaimar
-wie mkinzler schon sagte- 16bit-weise angeordnet.

'SizeOf' kann man nicht 'einstellen' :gruebel:

nein, es sind 32 Bit ...
Test: versuch es einfach mal mit string[8] :angel2:

jupp, die Ausrichtung mußt du direkt am Record einstellen, also Packed oder nicht und wenn nicht, dann greift hier als Erstes das aktuell in der Unit gültige/letzte {$A...} bzw. {$ALIGN ...} (siehe OH) und wenn da nichts steht, dann das aus den Projektoptionen.

Zitat:

Kann ich sizeof so einstellen das es nur packed ausgibt? bzw. wo is der unterschied von packed?
blos weil dir ein Maß nicht gefällt, änderst du ja auch nicht das Linial, sondern das zu Messende :zwinker:

PACKED besagt ... ach, schau einfach mal bei Delphi-Referenz durchsuchenpacked in deine OH.

mkinzler 30. Apr 2009 09:02

Re: Speicherbedarf Datenverbund?
 
Zitat:

Die Ausrichtung kann schon lange auf 1/2/4 oder 8 Byte eingestellt werden (Projektoptionen/Compiler/Codeerzeugung -> Ausrichtung von Record-Felder).
Bei neueren Delphi-Versionen ist hier der Default-Wert 8 Byte. Dies ist auch für neuerer Prozessoren (Pentium (?) und neuer) auch besser da hier die Prozessorarchitektur schon auf 64-Bit Speicherzugriff ausgerichtet ist).
In seinem Fall sind es wohl 2 Bytes


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr.
Seite 1 von 2  1 2      

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