4

C 中的填充量是否struct在标准或编译器和/或目标体系结构中明确定义。我在标准中找不到答案。

4

2 回答 2

7

它是实现定义的。从 C99 标准的第 6.7.2.1 节:

...结构或联合对象的每个非位域成员都以适合其类型的实现定义的方式对齐...

...结构对象中可能有未命名的填充,但不是在其开头...

编译器通常会选择适合底层硬件的安排(对齐内容以易于从内存中读取等)。

于 2012-04-29T18:48:10.530 回答
1

填充由实现决定,我们指的是用于编译代码的特定编译器。

在某些平台上,对于将使用什么填充有商定的约定。这就是使不同编译器编译的代码可以进行二进制互操作的原因。

因此,虽然理论上不同的编译器可以做出不同的选择,但只要所有代码都在单个进程中运行,不同的填充规则很少会成为问题。另一方面,如果您决定对struct通过网络发送的数据使用布局,那么您总是会遇到问题。不要将二进制布局结构用于传输线上的数据。

于 2012-04-29T18:49:59.653 回答