Description |
The $Align compiler directive determines whether Delphi aligns data, or whether it packs the data into the smallest space.
With $Align On (default), complex data types, such as records have their elements aligned to 2, 4 or 8 byte boundaries, as appropriate to the data type. For example, a Word field would be aligned to a 2 byte boundary.
With $Align On, the default value, you can override this setting with the packed option for complex data structures.
These alignments ensure optimal access performance.
$Align Off tells Delphi to ignore alignment, and thereby pack data.
|
| Notes | Examples of unpacked alignments :
Word = 2 bytes
LongWord = 4 bytes
Single = 4 bytes
Double = 8 bytes
$Align is equivalent to $A.
This directive can be used multiple times within your code.
The default value is $Align On
| | Related commands | $A | | Determines whether data is aligned or packed | Packed | | Compacts complex data types into minimal storage |
|
Download this web site as a Windows program.
|
|
|
|
Example code : Packing a record to reduce storage | type
 // Use the default setting : $Align+
 // Declare an unpacked, aligned record
TAlignedRecord = Record
name1 : string[4];
floater : single;
name2 : char;
int : Integer;
end;
 // Declare a packed record
TPackedRecord = Packed Record
name1 : string[4];
floater : single;
name2 : char;
int : Integer;
end;
 // Set alignment off
{$Align Off}
 // Declare an unpacked record
 // This will get treated as if packed was on
TUnPackedRecord = Record
name1 : string[4];
floater : single;
name2 : char;
int : Integer;
end;
var
alignedRec : TAlignedRecord;
packedRec : TPackedRecord;
unPackedRec : TUnPackedRecord;
begin
ShowMessage('Aligned record size = '+IntToStr(SizeOf(alignedRec)));
ShowMessage('Packed record size = '+IntToStr(SizeOf(packedRec)));
ShowMessage('UnPacked record size = '+IntToStr(SizeOf(unPackedRec)));
end;
| Show full unit code | Aligned record size = 20
Packed record size = 14
UnPacked record size = 14 |
|
|