gpt4 book ai didi

c - cdecl 调用约定为什么调用者必须清除堆栈?

转载 作者:太空狗 更新时间:2023-10-29 17:14:46 26 4
gpt4 key购买 nike

发件人:http://en.wikipedia.org/wiki/X86_calling_conventions

push c
push b
push a
call function_name
add esp, 12 ;Stack clearing
mov x, eax

为什么我们需要显式地向 ESP 添加 12 来清除堆栈,因为被调用的函数应该已经将参数弹出堆栈,从而恢复堆栈指针...?

另一个问题:

理论上,可以实现由被调用者负责清理权的可变参数函数(例如,如果您将堆栈上的参数数量传递到寄存器中)?

最佳答案

因为,根据 C 调用约定,被调用函数不会弹出参数。这就是这个调用约定的重​​点。

它允许诸如可变参数之类的东西。

关于c - cdecl 调用约定为什么调用者必须清除堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1539147/

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