我对没有参数的结构对齐属性有一些疑问。当声明具有如下对齐的结构时。
struct __attribute__ ((aligned))
{
char a;
}s;
printf("%zu\n",sizeof(s));
输出为 16。
根据以下链接。
http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Type-Attributes.html
编译器自动将类型的对齐设置为您正在编译的目标机器上的任何数据类型所使用的最大对齐。
这意味着我不能声明大于 16 字节的对齐。但如果我给
struct __attribute__ ((aligned(32)))
{
char a;
}s;
printf("%zu\n",sizeof(s));
然后我得到输出 32。
这意味着我们可以声明大于 16 字节的对齐。
那为什么要得到 16 字节呢?它是特定于编译器的还是特定于目标的?
16 位系统上的对齐——我读到在 16 位系统上不会有任何对齐问题。谁能告诉我为什么?