这是一个简单的问题,但我在 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 永远不会(默默地)装箱一个结构体,仅用于作为传输的返回值。