FreeBASIC中的
Type和
Union结构的默认布局与GCC兼容,遵循SysV(Linux / BSD)和Microsoft(Windows)ABI。这允许与GCC和其他编译器的二进制兼容性。
默认情况下,字段与其自然边界对齐,它们是:
- 1字节数据类型的1的倍数
- 2字节数据类型的2的倍数
- 4字节数据类型的4位数
- 8位数据类型(32位x86 DOS(DJGPP)/ Linux / BSD)的4位数)
- 8位数据类型(Win32 / Win64,32位ARM Linux 64位x86_64 / AArch64 Linux / BSD)的倍数,
- Type/ Union数据类型的字段的最大自然边界
- 动态字符串描述符被处理为Type结构,数据指针字段是具有最大自然对齐的字段。
- 固定长度字符串根据字符大小所需的对齐方向对齐。
- 根据元素数据类型所需的对齐方式对齐静态数组。
编译器通过在它们之前插入填充字节来对齐字段,以便将它们移动到与其自然边界对应的偏移量,或者如果它小于字段的值,则为
Field = N给定的值的倍数自然对齐。在x86架构中,不需要这种正确的对齐,但是可以在访问字段时获得更好的性能。其他架构实际上可能需要正确对齐。
除了场对齐之外,通过在结构的末尾添加填充字节,整个结构的大小也被舍入到其字段的最大自然对齐的倍数。这确保在这种结构的阵列中,每个单独的一个按照字段的要求被正确地对准。