首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从堆栈指针中减去对齐?

从堆栈指针中减去对齐?
EN

Stack Overflow用户
提问于 2012-06-05 00:04:45
回答 1查看 2.1K关注 0票数 3

我见过一段汇编代码,它在没有任何特殊原因的情况下,在调用函数之前从堆栈指针中减去。减去的空间保留为空,不使用:

代码语言:javascript
运行
复制
sub    esp, 8    ; stack align
push   dword y
push   dword [x]
call   foo
add    esp, 16
mov    [x], eax

代码的作者添加了注释'stack align',但我不知道'stack align‘是什么意思,也不知道命令sub esp, 8如何帮助实现它。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-05 02:24:56

如果在输入函数时堆栈指针与缓存线对齐,则函数的执行可能对缓存施加较小的压力。

因此,编译器系统可以被组织成坚持在高速缓存线上对齐SP的情况下进入函数,并且编译器知道在每个调用点使用了多少堆栈,在它进行调用之前重新对齐SP需要多少。

这就可以解释你的例子了。我还没有看到很多编译器真正做到这一点,因为堆栈本身倾向于以适度的距离增长/缩小,而且由于一次又一次地重用本地存储,总体上不会对缓存提出太多要求。

另一个用途是为被调用者分配工作空间,或者返回一个比寄存器更大的结果。编译器不会写这样的注释,所以可能是有人这样做的。也许他知道自己在做什么,也许他不知道。如果被调用的函数不需要这个空间,那么它只是一个浪费的指令。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10884376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档