Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Frage zu einer type definition (https://www.delphipraxis.net/194124-frage-zu-einer-type-definition.html)

himitsu 20. Okt 2017 13:09

AW: Frage zu einer type definition
 
Arrays sind Packed, aber wenn der Field-Typ unpacked ist und eine unrunde Größe hat (z.B. 3 Byte Inhalt, aber 4 Byte groß), dann ist das Array natürlich auf die 4 Byte ausgerichtet.

Es gibt kein MinAlign, sondern nur ein MaxAlign, als Compiler-Option.
2 Byte passen "genau" in ein Word, also richten sie sich immer doppelt übereinander aus, egal ob packed oder nicht.

Rollo62 20. Okt 2017 18:59

AW: Frage zu einer type definition
 
Îch sehe hier wird alles theoretisch perfekt aufarbeitet, super :-D

Ich bin aber leider auch zu oft auf der praktischen Seite unterwegs, und da wird
dann aus solchen Konstrukten gerne schnell mal:

Delphi-Quellcode:
type
  T_BUS_Text = record
    case byte of
      0:
        (b: array[1..20] of byte);
      1:
        (s: array[1..20] of AnsiChar); //Probleme mit Unicode vermeiden
      2:
        (w: array[1..10] of word);
      //
      3:
        (w: array[1..3] of TDings); // Sind das 9 Bytes ?
      4:
        (w: array[1..5] of TBums);  // Sind das 10 Bytes ? 
      5:
        (w: array[1..2] of TFlumms); // Sind das 12 Bytes ?
      6:
      //...

  end;
Bevor ich mir da alle Optionen durchspiele (die mein Kollege vielleicht nicht so fleissig testet), mache ich einfach
pro Forma ein "packed" davor, und bin erstmal auf der sichere(ren) Seite :stupid:

Rollo

himitsu 21. Okt 2017 03:26

AW: Frage zu einer type definition
 
Warum durchtesten?

Wenn das "veränderliche" {$ALIGN} bekannt ist, kann ich meistens sofort sagen, wie das ausgerichtet wird
Wenn man das "einfache" System erstmal verstanden hat, ist es garnicht mehr so schwer.
Nur beim Typen Extended vergesse ich ständig, wie dieser krumme 10-Byte-Typ gerechnet wird. :oops:

PS: Das Selbe betrifft natürlich auch die Felder in Objekten (unter Betrachtung des Vorfahren)
und auch die globalen Variablen (HEAP), sowie die lokalen Variablen (Sack, nur hier halt rückwärts).

PACKED ist echt etwas ganz Schlimmes, denn packed ARRAY/RECORD werden als FieldSize=1 gerechnet, also ab da nicht mehr optimal ausgerichtet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 Uhr.
Seite 2 von 2     12   

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