结构成员的运行时对齐

时间:2014-07-31 09:33:42

标签: c++ c++11 memory-alignment

请考虑关注struct

struct SomeStruct
{
    int a;
    float b;
    double c;
};

据我所知,在声明SomeStruct类型的对象时,struct的第一个成员的地址(在这种情况下为a)等于该地址。对象本身。

SomeStruct obj;
assert(reinterpret_cast<uintptr_t>(&obj) == reinterpret_cast<uintptr_t>(&obj.a));

我是否可以假设a成员的运行时地址即使SomeStruct也符合alignof(int) != alignof(SomeStruct)的对齐要求?

1 个答案:

答案 0 :(得分:5)

<强> 9.2.19     指向标准布局结构对象的指针,使用reinterpret_cast进行适当转换,指向它     初始成员(或者如果该成员是位字段,则指向它所在的单位),反之亦然。 [ 注意:     因此,在标准布局结构对象中可能存在未命名的填充,但不是在其开头,     必要时,以实现适当的对齐。 - 注意事项]。