2
我看到了一個彙編代碼,它在調用一個函數之前從堆棧指針中減去,沒有任何特別的原因。減去的空間爲空,而不是使用:從堆棧指針減去對齊?
sub esp, 8 ; stack align
push dword y
push dword [x]
call foo
add esp, 16
mov [x], eax
代碼的作者添加的註釋「疊加對準」,但我不知道什麼是「疊對齊」的意思,也沒有如何做的命令sub esp, 8
幫助實現它。
任何想法?
請參閱http://stackoverflow.com/questions/612443/why-does-the-mac-abi-require-16-byte-stack-alignment-for-x86-32 –
答案是「SSE要求他們的記憶操作數對齊到16字節邊界「。但該程序不使用SSE中介紹的任何指令。那麼對齊16字節堆棧的動機是什麼?除了上證所的要求之外,還有另外一個原因嗎? –
即使沒有使用SSE指令,16字節對齊您的代碼和數據也是一個好主意。內存/高速緩存邏輯和指令預取都有好處,因爲它們可以保證內存請求只需單次讀取即可滿足。這是有道理的,因爲現代英特爾芯片的存儲器接口是64位寬和雙通道(16字節)。 – BitBank