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