Arp*_*pit 2 c compiler-construction callstack system
我想知道哪一个负责清理堆栈
假设你有一个功能乐趣,让我们这样说:
var = fun(int x, int y, float z, char x);
Run Code Online (Sandbox Code Playgroud)
何时fun被调用它将与参数一起进入堆栈然后当函数返回负责清理堆栈的人是它自己的函数还是将保存返回值的"var".
还有一件事,任何人都可以解释调用约定的概念吗?
你自己提到了答案:调用约定.
调用约定类似于契约.它决定了以下几点:
根据平台和编程环境,有许多不同的调用约定.x86平台上的两个常见调用约定是:
STDCALL
参数从右到左传递到堆栈.被调用的函数清理堆栈.
CDECL
参数从右到左传递到堆栈.在调用函数清理堆栈.
在这两种情况下,返回值都在EAX寄存器中(或ST0浮点值)
x86平台的许多编程语言都允许指定调用约定,例如:
德尔福
Run Code Online (Sandbox Code Playgroud)function MyFunc(x: Integer): Integer; stdcall;Microsoft C/C++
Run Code Online (Sandbox Code Playgroud)int __stdcall myFunc(int x)
一些使用说明:
在创建一个简单的应用程序时,很少需要更改或了解调用约定,但有两种典型情况需要关注调用约定:
有关详细信息,我推荐这些维基百科文章: