我刚学习C语言,有一件事情我不太明白。当一个函数返回的结果尺寸不超过寄存器大小时,我的编译器会将其放在EAX中返回。但是当我返回一个大型结构体(不是指针而是结构体本身)时,它会通过堆栈返回。
我的问题是:编译器如何知道如何调用另一个对象导出的函数呢?虽然有一些调用约定(例如stdcall),但这只关乎传递参数,而不是读取返回值,对吗?
应该有一些规则,比如“如果返回值声明为大于EAX,则从[bp-...]中提取”。
还有一个问题:是否可以说,我要返回的大于寄存器大小的对象应该存储在堆中,并通过指针返回以避免所有的堆栈操作?
谢谢。
我的问题是:编译器如何知道如何调用另一个对象导出的函数呢?虽然有一些调用约定(例如stdcall),但这只关乎传递参数,而不是读取返回值,对吗?
应该有一些规则,比如“如果返回值声明为大于EAX,则从[bp-...]中提取”。
还有一个问题:是否可以说,我要返回的大于寄存器大小的对象应该存储在堆中,并通过指针返回以避免所有的堆栈操作?
谢谢。