В прошлый день я читал справочник по C # и увидел там заявление. Пожалуйста, обратите внимание на следующее заявление.
Контекст:
использование структуры, а не класса для Point может иметь большое значение в количестве выделений памяти, выполняемых во время выполнения. Программа ниже создает и инициализирует массив из 100 точек. Когда Point реализован как класс, создается 101 отдельный объект - один для массива и по одному для 100 элементов.
class Point
{
public int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
class Test
{
static void Main() {
Point[] points = new Point[100];
for (int i = 0; i < 100; i++)
points[i] = new Point(i, i*i);
}
}
Если вместо этого Point реализован как структура, как в
struct Point
{
public int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
создается только один объект - объект для массива. Экземпляры Point размещаются в массиве внутри массива. Этой оптимизацией можно воспользоваться не по назначению. Использование структур вместо классов также может замедлить работу приложения или занять больше памяти, поскольку передача экземпляра структуры по значению вызывает создание копии этой структуры.
Вопрос: Здесь у меня вопрос: как распределяется память в случае типа значения и ссылочного типа?
Путаница: почему в справочном руководстве упоминается, что будет инициализирован только 1 объект. Насколько я понимаю, для каждого объекта в массиве будет выделена отдельная память.
Изменить: возможный дубликат. Этот вопрос немного отличается от возможного дублирования вопроса, предложенного Джейсоном. Меня беспокоит то, как выделяется память только в случае типа значения и ссылочного типа, в то время как этот вопрос просто объясняет обзор типа значения и ссылочного типа.