gpt4 book ai didi

c++ - 在函数调用中从 %esp 中减去分配了多少空间?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:42 28 4
gpt4 key购买 nike

C++,ATT 汇编

我有以下汇编代码:

push %ebp
mov %esp, %ebp
sub $0x28, %esp
(...)

我的教科书声称通过从 %esp 中减去 0x28(作为堆栈形成的一部分),为变量分配了 12 个字节。为什么从栈中减去十进制40会分配12个字节?

最佳答案

这会在堆栈上分配 40 个字节。但是,除了局部变量之外,它还有其他用途,所以我猜测其余部分用于对齐和 future 函数调用的参数。

由于函数参数也在堆栈上传递,因此需要为该函数要传递给另一个函数的任何空间留出空间。可以在使用push 执行调用时分配此空间,但在函数开头分配一次空间并仅使用mov 是很常见的稍后将数据放置到位。如果您的函数使用 12 个字节作为局部变量,那么最多可以为函数参数留出 28 个字节供以后使用。

还可以为对齐分配一些额外的空间。除了 Jerry 提到的变量对齐之外,许多系统都希望堆栈指针与某个值对齐,因此如果您要进行函数调用,则需要保留这一点。在 32 位系统上,这通常是 8 个字节,但在这种情况下也可以是 16 个字节。

关于c++ - 在函数调用中从 %esp 中减去分配了多少空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14846874/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com