【发布时间】:2018-12-10 02:18:39
【问题描述】:
我搜索了有关非对齐访问的标准,但没有找到任何东西(可能是我不小心)。
这是未定义的行为吗?是否定义了实现?
由于许多当前的 CPU 支持未对齐访问,因此未对齐内存访问由实现定义是明智的。是这样吗?
通过非对齐访问,我的意思是例如:
alignas(int) char buffer[sizeof(int)+1];
int &x = *new(buffer+1) int;
x = 42;
【问题讨论】:
-
我认为相关部分是 [basic.align]。实现定义。
-
@RaymondChen:我发现的只是对齐值是实现定义的。但没有关于未对齐的访问。你在那儿看到别的东西了吗?
-
我们怎么知道这是一个未对齐的访问?
sizeof(int)和所需的对齐方式都是实现定义的。可能与char相同。
标签: c++ language-lawyer c++17 memory-alignment