Specifies field alignment.
Field can be used to pack
Types or
Unions more tightly than the default layout. The most commonly used value is
Field = 1, which causes the
Type or
Union to be packed as tightly as possible, without any padding bytes being added between the fields or at the end of the
Type.
Field can only be used to decrease field alignment, but it cannot be used to increase it. In order to add padding bytes, a
Union with appropriate members could be used instead.
The default layout of
Type and
Union structures in FreeBASIC follows the GCC ABI. This allows for compatibility with other compilers or languages such as C.
By default, fields are aligned to their natural boundaries, which are:
- A multiple of 1 for 1-byte data types
- A multiple of 2 for 2-byte data types
- A multiple of 4 for 4-byte data types
- A multiple of 4 for 8-byte data types (Linux & other non-Win32 systems only)
- A multiple of 8 for 8-byte data types (Win32 only)
- The largest natural boundary of the fields of Type/Union data types
Dynamic string descriptors are handled as
Type structures with the data pointer field being the one with the largest natural alignment.
Fixed-length strings are aligned according to the alignment required for the character size.
Static arrays are aligned according to the alignment required for the element data type.
The compiler aligns fields by inserting padding bytes in front of them in order to move them to an offset that corresponds to their natural boundary, or to a multiple of the value given with
Field, if it is smaller than the field's natural alignment. On the x86 architecture, such proper alignment is not required but can result in better performance when accessing the fields. Other architectures might actually require proper alignment.
In addition, the whole structure's size is rounded up to a multiple of the largest natural alignment of its fields, by adding padding bytes at the end of the structure. This ensures that in an array of
Types, each individual one is properly aligned as required by the fields.