改变结构体成员的字节对齐
例子
技巧
在上面的程序里,ST_A结构体的内存布局默认是这样的:
编译执行,结果如下:
使用 gcc 的"-fpack-struct[=n]"选项(“n”需要为2的倍数)可以改变成员的地址对齐。例如指定“n=2”时,将标明结构体成员的最大对齐地址为 2。这样ST_A结构体中的成员b的地址将不再按照4字节对齐,内存布局变为:
当不指定“n”时,将没有填充字节,所有成员将一个挨着一个排在一起:
由于这个编译选项会导致 ABI(Application Binary Interface)的改变,所以使用时一定要谨慎。 详情参见gcc 手册
贡献者
nanxiao