Itanium ABI在多大程度上确实指定了填充和对齐?

Lig*_*ica 12 c++ gcc abi

我听说了:

[ABIs]保证结构的确切布局,每个成员的字节偏移,哪些位用于位字段,填充的位置和填充量等等...

但我一直认为填充和对齐是未指定的和不可靠的.

是否安腾ABI(其中GCC使用)实际上指定这些事情(据所知,它似乎并没有超出规定范围)?

如果确实如此,那么选项如何__attribute__ ((packed))适应呢?他们最终通过改变事物的排列来打破ABI吗?

或者,正如引言所暗示的那样,工具链之间只是未指定包装,但事实上在使用某个ABI时是否可靠和可预测?然后,再次,如何__attribute__ ((packed))适应这种情况?

Cha*_*pul 2

ISO 标准 C++ 规范未指定填充和对齐,因此不可靠。

引文中使用“精确”一词是夸张的。Itanium ABI(GCC 使用的)可以根据需要指定这些内容(在指定范围内),而不是总是准确地指定

事实上,在假设预定目标架构和环境的工具链的使用中,打包是可靠且可预测的。ABI。当适用于工具链的所有目标特定细节__attribute__ ((packed))像任何其他构造一样预先确定时,将为工具链正确工作生成可预测的输出。