一个简单的问题,但我还没有在 Stack Overflow 上找到明确的答案。
struct MyStruct { int x, y, z; }
MyStruct GetMyStruct() => new MyStruct();
static void Main()
{
var x = GetMyStruct(); // can boxing/unboxing ever occur?
}
从函数返回时, C#结构(值类型)是否总是复制到堆栈中,无论它有多大?我不确定的原因是,对于 MSIL 以外的某些指令集(例如 x86),返回值通常需要适合处理器寄存器,并且不直接涉及堆栈。
如果是这样,是否是调用站点在CLR堆栈上为(预期的)值返回类型预分配空间?
[编辑:答复摘要:] 对于原始问题的意图,答案是否定的;CLR永远不会(默默地)将一个结构装箱,只是为了将其作为返回值发送。