我正在尋找一個關於C++中的內存對齊,典型的方法,編譯器之間的差異和常見陷阱的好(全面)文檔。只是爲了檢查我對該主題的理解是否正確,並學習新的東西。我在哪裏可以找到跨不同平臺/編譯器的C++內存對齊方面的文檔?
這個問題由我的回答啓發,我用下面的結構另外一個問題:
char const buf[1000] = ...;
unsigned int i = *reinterpret_cast<unsigned int*>(buf + shift); // shift can be anything
它被批評爲不符合內存對齊規則。你能解釋爲什麼這種方法存在缺陷從內存對齊的角度來看,是否可以解釋爲什麼?一個不起作用的例子將受到高度讚賞。我知道這通常是一種不好的方法,但我經常在網絡協議實現中使用它,所以它比實際問題更具實際意義。
另請不要在這裏提到strict-aliasing,這是另一個問題。
移位不是系統字長的倍數嗎?你可能因爲試圖在一個單詞的中間找到一個指針(比如在一個32位字的中間)而受到批評,這很奇怪。 –
即使shift是4的倍數,也不能保證'buf'會在4的倍數地址處開始 – nos
'shift'可以是任何東西,更新問題 –