我对没有参数的struct alignment属性有一些疑问。当声明具有如下给定的对齐的结构时。
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位系统上没有任何对齐问题。谁能告诉我为什么?
答案 0 :(得分:1)
如果编译器获得了不合格的__attribute__((aligned))
属性,则默认到机器上最大的必要对齐。这与说'你不能设置更大的路线'不一样;您的测试表明您可以显式设置更大的对齐方式。除非你明确指出,否则你不会得到更大(或更小)的对齐。