Задать вопрос
@footballer

Почему в var a = new int[1] {5} нет упаковки?

Говорят, что упаковка - тяжелая операция из-за того, что структура копируется из стека в кучу.
В качестве примера упаковки приводят такой код:
var a = new object[1] {5};
то есть когда мы int помещаем в массив object-ов.
Но ведь даже если мы создаем массив int-ов так:
var a = new int[1] {5} ;
то все-равно наш int 5 должен скопироваться в кучу, т.к. память под массив выделяется в куче. Но почему в этом случае не считается, что это не упаковка, и считается, что это не тяжелая операция?
  • Вопрос задан
  • 125 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Учебный центр IBS
    SDP-030_PRG Продвинутая разработка в Microsoft .NET
    1 неделя
    Далее
  • Ulearn.me
    Проектирование на языке C#
    1 неделя
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 2
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 1
@kttotto
пофиг на чем писать
Я, думаю, Вы что-то не так поняли. Массив, это ссылочный тип и в случае
var a = new int[1] {5}
значение переменной a будет лежать в стеке, но значением будет ссылка на место в куче, указывающая на массив интов. Тоже самое касается и
a = new object[1] {5}

Упаковка будет происходить со значениями, которые лежат в стеке, а потом копируются в кучу. Например так
int a = 5;
var b = (object)a;

В первой строке мы положили в стек пятерку, а во второй эту пятерку мы помещаем в кучу. Переменная b будет лежать в стеке, значение которой будет указывать на адрес в куче, где лежит тип object, со значением value равным 5. И то, что у объекта поле будет интовое, не означает, что оно будет в стеке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы