簡體   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