1

我对没有参数的结构对齐属性有一些疑问。当声明具有如下对齐的结构时。

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

4

1 回答 1

2

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

于 2013-07-15T04:10:12.280 回答