Speicherbedarf Datenverbund?
Servus,
ich habe folgende Typdeklartionen:
Delphi-Quellcode:
Für mich wären dies ein Speicherbedarf von 15Byte (11 für String+4Byte für den Pointer)
type tpointer=^tdaten;
tdaten=record name:string[10]; next:tpointer; end; 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] |
Re: Speicherbedarf Datenverbund?
Es wird auf auf Word-Grenzen ausgerichtet. 15Bytes wäre es bei packed
|
Re: Speicherbedarf Datenverbund?
Kann ich sizeof so einstellen das es nur packed ausgibt? bzw. wo is der unterschied von packed?
|
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: |
Re: Speicherbedarf Datenverbund?
Gäbe es noch eine andere Methode den Speicherbedarf (packed) auszugeben?
|
Re: Speicherbedarf Datenverbund?
Was gefällt dir an packed nicht?
Warum ist die das eine Byte so wichtig? |
Re: Speicherbedarf Datenverbund?
Zitat:
Delphi-Quellcode:
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.
tdaten = packed record
name : string[10]; next : tpointer; end; |
Re: Speicherbedarf Datenverbund?
Zitat:
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). |
Re: Speicherbedarf Datenverbund?
Zitat:
Zitat:
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:
PACKED besagt ... ach, schau einfach mal bei packed in deine OH. |
Re: Speicherbedarf Datenverbund?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 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