The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 4,261 other subscribers

Delphi – The use of AlignAttribute: indicate the alignment of a field

Posted by jpluimers on 2020/09/25

Great answer by Stefan Glienke at [WayBack] What’s the use of AlignAttribute? The documentation only says Internal use only.  – 丽丽乌克 – Google+:

It forces the element it annotates to be aligned like specified – valid values are the same as for $A (1, 2, 4, 8, 16)

Example:

{$A4}
type
  TMyRecordA = record
    x: Integer;
    y: Int64;
  end;

  TMyRecordB = record
    x: Integer;
    [Align(8)]
    y: Int64;
  end;
var
  a: TMyRecordA;
  b: TMyRecordB;
  offset: Integer;
begin
  offset := PByte(@a.y) - PByte(@a);
  Writeln(SizeOf(a));
  Writeln(offset);
  offset := PByte(@b.y) - PByte(@b);
  Writeln(SizeOf(b));
  Writeln(offset);

this will output:
12
4
16
8

–jeroen

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.