Почему .NET создает защитные копии для структур только для чтения в Jitted-методахC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему .NET создает защитные копии для структур только для чтения в Jitted-методах

Сообщение Anonymous »

Я пытаюсь понять, почему .NET создает защитные копии для структур только для чтения. Защитное копирование предотвращает изменение данных. Но если структура помечена как доступная только для чтения, изменить структуру невозможно. Однако я вижу, что защитные копии создаются в различных сценариях.
Например, для 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
Мой вопрос: есть ли какая-либо причина создавать защитную копию в этом сценарии и почему бы просто не передать указатель стека в метод M1?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ed-methods
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему .NET создает защитные копии для структур только для чтения в Jitted-методах
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Почему .NET создает защитные копии для структур только для чтения в Jitted-методах
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Почему .NET создает защитные копии для структур только для чтения в Jitted-методах
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Обновить ссылки на диаграммы для новой копии отчета и новой копии книги.
    Anonymous » » в форуме Javascript
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • Я не понимаю, как ссылаются объекты на мелкой копии и глубокой копии
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»