Например, для Core CLR 8.0.824.36612 на x86 в примере SharpLab.IO я вижу создание защитной копии если я не укажу модификатор в параметре M1.
Код: Выделить всё
public readonly struct Foo
{
public readonly int i1;
public readonly int i2;
public readonly int i3;
public readonly int i4;
public readonly int i5;
public readonly int i6;
public readonly int i7;
}
public class C
{
public static int M(Foo foo)
{
var a = M1(foo);
return a + 1;
}
[MethodImpl(MethodImplOptions.NoInlining)]
public static int M1(Foo f)
{
return f.i1 + 1;
}
}
Код: Выделить всё
C.M(Foo)
L0000: push ebp
L0001: mov ebp, esp
L0003: vzeroupper
L0006: sub esp, 0x1c
L0009: vmovdqu xmm0, [ebp+8]
L000e: vmovdqu [esp], xmm0
L0013: vmovq xmm0, [ebp+0x18]
L0018: vmovq [esp+0x10], xmm0
L001e: mov eax, [ebp+0x20]
L0021: mov [esp+0x18], eax
L0025: call dword ptr [0x322ac7b4]
L002b: inc eax
L002c: pop ebp
L002d: ret 0x1c
Подробнее здесь: https://stackoverflow.com/questions/791 ... ed-methods