【发布时间】:2025-11-29 20:05:01
【问题描述】:
C struct 中的填充量是否在标准或编译器和/或目标体系结构中定义良好。我在标准中找不到答案。
【问题讨论】:
C struct 中的填充量是否在标准或编译器和/或目标体系结构中定义良好。我在标准中找不到答案。
【问题讨论】:
它是实现定义的。来自 C99 标准的第 6.7.2.1 节:
...结构或联合对象的每个非位域成员在实现定义中对齐 适合其类型的方式...
...可能有未命名的 在结构对象内填充,但不是在其开头...
编译器通常会选择适合底层硬件的排列方式(对齐内容以便于从内存中读取等)。
【讨论】:
填充由实现决定,我们指的是您用于编译代码的特定编译器。
在某些平台上,对于将使用什么填充有约定的约定。这就是使不同编译器编译的代码可以进行二进制互操作的原因。
因此,虽然理论上不同的编译器可以做出不同的选择,但只要所有代码都在单个进程中运行,不同的填充规则很少会成为问题。另一方面,如果您决定对通过网络发送的数据使用struct 布局,那么您总是会遇到问题。不要将二进制布局结构用于传输线上的数据。
【讨论】: