![]() |
Array of Single/Integer <> packed record mit Single/Integer ?
Hallo #,
ist eine Array Of Single eigentlich packed oder nicht? Ein Single hat ja 32 Bit, müsste also aus Performance-Gründen nicht ausgerichtet werden, oder ? Danke Heiko |
AW: Array of Single/Integer <> packed record mit Single/Integer ?
Im Grunde ist es schon packed, da nur ein Typ für die Ausrichtung verwendet wird.
Falls sich das nicht geändert hat, dann gibt es nur die Möglichkeit die Maximale-Ausrichtung zu begrenzen und nicht eine Minimale vorzugeben, womit hier immer mit der Größe des einen Typ ausgerichtet wird. Packed Arrays ändern sich nur, wenn man da einen Packed Record reinlegt und sich dort durch das Packed die Größe änderte. |
AW: Array of Single/Integer <> packed record mit Single/Integer ?
Ein
Delphi-Quellcode:
hat sowohl unter 32-Bit-Windows als auch unter 64-Bit-Windows eine Größe von 40 Byte. Die Option Record-Felder ausrichten ($A) bezieht sich, wie der Name schon sagt, auf Record-Felder und nicht auf Arrays.
array[0..9] of Single
Übrigens hat ein
Delphi-Quellcode:
auch ohne
array[0..9] of Byte
Delphi-Quellcode:
nur eine Größe von 10 Byte.
packed
Alle Angaben beziehen sich auf XE5. |
AW: Array of Single/Integer <> packed record mit Single/Integer ?
Ich hätte gedacht, daß Arrays Array-Felder auch ausgerichtet werden, denn wozu soll denn sonst das packed sinnvoll sein, welches man da angeben kann. :roll:
Aber da hab ich mich wohl getäuscht.
Delphi-Quellcode:
type
TMyRecord = record I: Integer; B: Byte; end; TMyPackedRecord = packed record I: Integer; B: Byte; end; var MyRecord: TMyRecord; MyRecordArray: array[0..9] of TMyRecord; MyRecordPackedArray: packed array[0..9] of TMyRecord; MyPackedRecord: TMyPackedRecord; MyPackedRecordArray: array[0..9] of TMyPackedRecord; MyPackedRecordPackedArray: packed array[0..9] of TMyPackedRecord; begin WriteLn('SizeOf(MyRecord) = ', SizeOf(MyRecord)); WriteLn('SizeOf(MyRecordArray) = ', SizeOf(MyRecordArray)); WriteLn('SizeOf(MyRecordPackedArray) = ', SizeOf(MyRecordPackedArray)); WriteLn('SizeOf(MyPackedRecord) = ', SizeOf(MyPackedRecord)); WriteLn('SizeOf(MyPackedRecordArray) = ', SizeOf(MyPackedRecordArray)); WriteLn('SizeOf(MyPackedRecordPackedArray) = ', SizeOf(MyPackedRecordPackedArray)); ReadLn; [edit] Arrays werden ausgerichtet, also zumindestens ihr Startpunkt. |
AW: Array of Single/Integer <> packed record mit Single/Integer ?
|
AW: Array of Single/Integer <> packed record mit Single/Integer ?
Hallo,
danke an alle. Hoffentlich stimmt es auch ;) Ich habe hier eine c++-Dll, die erwartet als Übergabe ein Array of float (Delphi: Single), dass die Dll befüllen will. void bla(float *const pValue, int Num) (Num ist die Größe von pValue) Heiko |
AW: Array of Single/Integer <> packed record mit Single/Integer ?
Bei Arrays aus "einfachen" Typen, mit 1, 2 oder 4 Byte gibt es eigentlich keinerlei Probleme.
Und 8 Byte geht auch, egal ob die Austrichtung 4 oder 8 Byte ist. {$ALIGN} Da liegt immer alles direkt hintereinander. Bei Records aus gemischten Typen und bei Typen die kein Vielfaches von 2 sind, da muß man schon etwas aufpassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 Uhr. |
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