c++ - 结构成员的运行时对齐

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

考虑以下结构:

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)?

最佳答案

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

关于c++ - 结构成员的运行时对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25055494/

相关文章:

c++ - 识别opencv中的小物体

c++ - 我如何将小数格式化为分母限制的分数

c++ - 如何从源 vector <> 构建搜索结果的 vector <>?

c - 为什么 malloc 是 16 字节对齐的?

c - 调查 Valgrind 无效读取

c++ - 默认函数参数值在模板中可见但不应该 (gcc)

c++ - 在 C++ 中检查运行时的可转换性

c++ - 如何从另一个源文件调用 main.cpp 中的静态函数?

c++ - 调用模板化基类的模板化成员失败

c++ - 类的成员字段顺序是 "stable"吗?