Cur*_*ous 2 c++ struct memory-alignment c++17
考虑下面的代码及其输出
#include <cstdint>
#include <iostream>
using std::cout;
using std::endl;
class alignas(8) Something {
std::uint8_t integer{};
};
int main() {
auto something = Something{};
auto character = std::uint8_t{};
cout << sizeof(something) << endl;
cout << reinterpret_cast<std::uintptr_t>(&something) << endl;
cout << reinterpret_cast<std::uintptr_t>(&character) << endl;
}
Run Code Online (Sandbox Code Playgroud)
https://wandbox.org/permlink/m6D0PYWyrGlfjYJP。一次运行的输出
8
140729604143976
140729604143975
Run Code Online (Sandbox Code Playgroud)
如果我有一个对齐到8个字节的结构,则对其进行调用sizeof会将结构的大小四舍五入到其对齐的最接近倍数。但是编译器仍然能够将对象放置在向上取整后剩下的假设空间中。
在什么情况下允许?总是允许吗?sizeof如果不尊重尺寸,为什么要在此处四舍五入?
它的位置something在140729604143976哪里0x7FFE2A107B68
它的位置character在140729604143975哪里0x7FFE2A107B67
请注意,character它已放在内存中的前 一个字节处,something因此有效。something从运行0x7FFE2A107B68到0x7FFE2A107B70完全不重叠character。