进程内存空间,函数返回的值是多少?

时间:2013-08-23 14:02:12

标签: memory process return

当函数的执行完成,并且指令和局部变量从堆栈中删除时,返回值如何存储在内存中以供进程的主程序使用?

2 个答案:

答案 0 :(得分:1)

如何传入参数以及从已执行函数返回的值称为调用约定

忽略运行时环境(Java和.NET,我正在看你)和脚本语言(其中任何一种)并纯粹在x86上的本机代码中进行概念,其中有很多。如果你曾经听过cdeclstdcall这个词,你可能会碰到它们。

通常,返回值将在寄存器中返回。例如,cdecl约定以EAX(对于整数和指针)或ST0(对于浮点值)返回数据。

但是调用约定不仅仅定义了返回格式。它还定义了如何传递参数(堆栈,或寄存器以及从左到右或从右到左)以及谁负责清理堆栈(即调用者或被调用者)。例如cdecl是调用者必须清理堆栈的对象的示例,而stdcall被调用者保持堆栈整洁。

其他约定包括fastcallpascalsyscall等。维基百科有good breakdown on them all,微软的MSDN notes也是如此。您可能还想查看详情为cdeclstdcall的问题“stdcall and cdecl”。

答案 1 :(得分:0)

我认为一个正确的答案 - “这取决于”......一般来说,它被称为“呼叫约定”。 我认为非常好的概述你可以找到here

请注意此链接仅与x86相关,因此对于其他体系结构,它们可能完全不同。