聊聊 GCC 中的 int 类型和字节对齐
最近看到一个问题,在 64 位操作系统中。实际测试环境 Ubuntu 22.04,GCC 11。
问 sizeof(stuct test) =?当然我知道这道题想考察的 int/long 定义以及对齐问题,之前编码也不会太在意这类似问题,直接打印出来就行,但是作为考题这里有诸多不严谨地方。我们好好探索下。
不管三七二十一,直接编译打印。
显然地,这里 int 为4个字节,char 被4字节对齐。
看几个 GCC 选项
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/x86-Options.html#x86-Options
看起来这里默认最大设置都是4字节对齐。
https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/Code-Gen-Options.html#Code-Gen-Options
显然地,这里的编译选项能够设置 long 类型和对齐。先看默认值。
这里能够设置 -m32 将 long 和指针类型设置为 4字节,但是对齐方式还是 4字节。
https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html
packed 为字节对齐,aligned 不管设置多少都是4自己对齐。
如下结论。