结构成员的运行时对齐

Mir*_*pas 1 c++ memory-alignment c++11

考虑以下struct:

struct SomeStruct
{
    int a;
    float b;
    double c;
};
Run Code Online (Sandbox Code Playgroud)

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

SomeStruct obj;
assert(reinterpret_cast<uintptr_t>(&obj) == reinterpret_cast<uintptr_t>(&obj.a));
Run Code Online (Sandbox Code Playgroud)

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

小智 5

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