繁体   English   中英

标准对未对齐的内存访问有何看法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM