Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Array of Single/Integer <> packed record mit Single/Integer ? (https://www.delphipraxis.net/178246-array-single-integer-packed-record-mit-single-integer.html)

hoika 27. Dez 2013 08:19

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

himitsu 27. Dez 2013 08:41

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.

Uwe Raabe 27. Dez 2013 09:31

AW: Array of Single/Integer <> packed record mit Single/Integer ?
 
Ein
Delphi-Quellcode:
array[0..9] of Single
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.

Übrigens hat ein
Delphi-Quellcode:
array[0..9] of Byte
auch ohne
Delphi-Quellcode:
packed
nur eine Größe von 10 Byte.

Alle Angaben beziehen sich auf XE5.

himitsu 27. Dez 2013 10:37

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.

Uwe Raabe 27. Dez 2013 10:59

AW: Array of Single/Integer <> packed record mit Single/Integer ?
 
Are there any difference between array and packed array in Delphi?

hoika 27. Dez 2013 12:45

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

himitsu 27. Dez 2013 12:58

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 09:03 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