我正在读这篇文章:
http://en.wikipedia.org/wiki/Struct_%28C_programming_language%29
其中指出:
“C 结构直接对应于具有相同用途的汇编语言数据类型,并且两者都引用连续的物理内存块,通常由字长边界分隔(大小)。在 80 年代中期,能够利用半字或字节边界(提供更密集的打包,使用更少的内存)的语言实现被认为是先进的。”
什么是字长边界?
答案1
一些体系结构将按给定的字长(两字节、四字节等)对齐数据,因此在 C 中定义此结构:
struct sample {
int a;
char b;
}
即使您预计它只有五个字节(a 为四个字节,b 为一个字节),最终大小也可能为八个字节。这确保每个成员都从 4 的倍数位置开始。并且它取决于编译发生的体系结构。如果需要强制打包,您可以这样做:
#pragma pack(1)
struct sample {
int a;
char b;
}