[英]What does the standard say about unaligned memory access?
我搜索了关于未对齐访问的标准,但没有找到任何东西(也许我是无意的)。
是不确定的行为? 它是实现定义的吗?
由于许多当前的CPU支持未对齐访问,因此未对齐的内存访问是实现定义的,这是明智的。 是这样的吗?
通过未对齐访问,我的意思是例如:
alignas(int) char buffer[sizeof(int)+1];
int &x = *new(buffer+1) int;
x = 42;
不,是UB。 您无法在未对齐的内存中启动对象的生命周期。 来自[basic.life] p1
类型T对象的生命周期始于:
获得具有适当对齐和T型尺寸的存储,并且
如果对象具有非空的初始化,则其初始化完成,
[...]
所以在你的例子中, x
引用的对象的生命周期甚至都没有开始,因此除了[basic.life] p6中提到的其他任何用法都是UB。
但是你的实现允许做的是说未对齐的内存(由所使用的底层架构指定)实际上是对齐的,从而使你的代码在C ++抽象机器下有效。 我不确定是否有任何编译器这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.