【发布时间】:2018-12-24 21:08:05
【问题描述】:
如果有C这样的结构
struct abc
{
uint16_t port_no; //2 Bytes
uint8_t src_mac[6]; //6 Bytes
}
编译器如何应用填充来对齐 32 位系统上的 4 字节字:
会不会
2 Bytes
Pad[2]
6 Bytes
Pad[2]
或
2 Byte
6 Byte
【问题讨论】:
-
对于您的特定编译器(及其版本),您可以使用
offsetof来查找。请注意,它是高度特定于实现的。 -
很多时候编译器都有结构打包机制
-
即使对于给定的编译器(版本),结果通常也是特定于目标的。
-
还可以使用
sizeof检查最后一个成员之后的填充。 -
@Someprogrammerdude 这不是特定于实现的。对齐和填充是架构调用约定的一部分,如果你愿意的话,它是 C 目标文件的 ABI。如果没有通用规则,来自不同编译器的目标文件就无法链接在一起。尽管如此,仍然有很多 32 位系统可供选择。