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