我有一些关于不带参数的结构对齐属性的问题。在声明具有如下所示对齐方式的结构时。
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 位系统上不会有任何对齐问题。谁能告诉我为什么?
最佳答案
如果编译器获得不合格的 __attribute__((aligned))
属性,它默认为机器上最大的必需对齐方式。这与说“你不能设置更大的对齐方式”是不一样的;您的测试表明您可以明确设置更大的对齐方式。除非您明确表示,否则您不会获得更大(或更小)的对齐。
关于c - 不带参数的结构对齐和 16 位目标上的对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17646596/