一个简单的问题,但我还没有找到Stack Overflow的明确答案.
struct foo { int x; int y; int z; }
foo Func()
{
return new foo();
}
void Func2()
{
foo f = Func(); // did boxing and unboxing occur?
}
Run Code Online (Sandbox Code Playgroud)
从函数返回时,C#struct(值类型)是否始终复制到堆栈中,无论它有多大?我不确定的原因是,对于除MSIL之外的一些指令集(例如x86),返回值通常需要适合处理器寄存器,并且不直接涉及堆栈.
如果是这样,那么调用站点是否为CLR堆栈预先分配了(预期)值返回类型的空间?
[编辑:回复摘要:]对于原始问题的意图,答案是否定的; CLR永远不会(默默地)将结构化为仅仅为了将其作为返回值发送.
EAX用于存储32位平台中函数的返回值,我只是想知道一个函数的返回值大小是否大于4个字节,eax如何处理呢?在这种情况下,OS可以将返回值保存在堆栈中并将堆栈的地址存储在EAX中,但是OS如何判断存储在EAX中的值是返回值的地址还是实际上是返回值本身?