【发布时间】:2011-07-18 23:27:05
【问题描述】:
我是 C 新手,有一点我无法理解。 当函数返回不大于寄存器的东西时——我的编译器将它放在 EAX 中。 当我返回大结构(不是指针而是结构本身)时——它是通过堆栈返回的。
我的问题是:编译器如何知道如何调用另一个对象导出的函数? 有一个调用约定(如 stdcall),但它是关于传递参数,而不是读取返回值,对吧?
应该有一些规则,例如“如果声明的返回值大于 EAX,则从 [bp-...] 获取它”。
还有一个问题:是否应该说我想要返回的大于寄存器的对象应该存储在堆中并通过指针返回以防止所有操作而不是堆栈操作?
谢谢。
【问题讨论】:
标签: c function return-value calling-convention