Массив ValueType в C # переходит в кучу или стек?

Возможный дубликат:
(C #) Массивы, куча, стек и типы значений

Я пытаюсь изучить некоторые различия между распределением памяти в С #

Предположим, у меня есть такая инструкция:

int[] array = new int[512];

"Массив" уходит в Heap? Или он резервирует 512 целых чисел в стеке?


person RSort    schedule 22.07.2011    source источник
comment
Кроме того, blogs.msdn.com/b/ericlippert/archive/2009/05/04/ должна стать обязательной лекцией для всех, кто думает о куче / стеке в языках с управляемой памятью.   -  person    schedule 22.07.2011
comment
docs. microsoft.com/en-us/archive/blogs/ericlippert/ Архивная копия сообщения в блоге Эрика   -  person David Peters    schedule 14.01.2020


Ответы (1)


Сам массив - это память, выделенная в куче. Люди путаются и думают, что типы значений всегда находятся в стеке, и это не всегда правильно.

Например, в этом классе:

public class X
{
    public int Y;
}

Несмотря на то, что Y - это int (тип значения), поскольку он содержится в классе (ссылочный тип), int Y будет храниться вместе с самим объектом, который, скорее всего, находится в куче.

Массив аналогичный. Целые числа содержатся в массиве как типы значений, но сам массив находится в куче, и, следовательно, целые числа тоже.

person James Michael Hare    schedule 22.07.2011