在16位目标上没有参数和对齐的struct alignment

时间:2013-07-15 04:03:23

标签: c

我对没有参数的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位系统上没有任何对齐问题。谁能告诉我为什么?

1 个答案:

答案 0 :(得分:1)

如果编译器获得了不合格的__attribute__((aligned))属性,则默认到机器上最大的必要对齐。这与说'你不能设置更大的路线'不一样;您的测试表明您可以显式设置更大的对齐方式。除非你明确指出,否则你不会得到更大(或更小)的对齐。