AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Array of Single/Integer <> packed record mit Single/Integer ?
Thema durchsuchen
Ansicht
Themen-Optionen

Array of Single/Integer <> packed record mit Single/Integer ?

Ein Thema von hoika · begonnen am 27. Dez 2013 · letzter Beitrag vom 27. Dez 2013
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#1

Array of Single/Integer <> packed record mit Single/Integer ?

  Alt 27. Dez 2013, 09:19
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

AW: Array of Single/Integer <> packed record mit Single/Integer ?

  Alt 27. Dez 2013, 09:41
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#3

AW: Array of Single/Integer <> packed record mit Single/Integer ?

  Alt 27. Dez 2013, 10:31
Ein 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 array[0..9] of Byte auch ohne packed nur eine Größe von 10 Byte.

Alle Angaben beziehen sich auf XE5.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#4

AW: Array of Single/Integer <> packed record mit Single/Integer ?

  Alt 27. Dez 2013, 11:37
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.

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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (27. Dez 2013 um 11:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#5

AW: Array of Single/Integer <> packed record mit Single/Integer ?

  Alt 27. Dez 2013, 11:59
Are there any difference between array and packed array in Delphi?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Array of Single/Integer <> packed record mit Single/Integer ?

  Alt 27. Dez 2013, 13:45
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#7

AW: Array of Single/Integer <> packed record mit Single/Integer ?

  Alt 27. Dez 2013, 13:58
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:29 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