在struct中使用__attribute __((aligned())),为什么sizeof的结果是这样的?

hex*_*ecs 10 c memory-management

这是我的测试代码:

#include <cstdio>
struct A {
    int  a;
    int  b;
    int  c __attribute__((aligned(4096)));
    int  d;
}t;
int main()
{
    printf("%d\n",sizeof(t));

    return  0;
}
Run Code Online (Sandbox Code Playgroud)

结果是8192,但我无法弄清楚原因.

rod*_*igo 12

关于结构中的对齐有一些值得一提的事实:

  1. 类型的大小始终是其对齐的倍数.
  2. 结构的对齐始终是其所有成员对齐的倍数.

因此,由于其中一个成员的对齐方式为4096,因此结构本身的对齐方式至少为4096.很可能就是这样.

但由于它之前需要4080字节的填充,c结构的大小至少为4104,但它必须是多个4096,它的对齐.所以它增长到8192.