Ответ
Массив структур (struct[]) в C# хранится в непрерывном блоке памяти в управляемой куче. Это отличается от массива ссылочных типов (class[]), который хранит непрерывный блок ссылок (указателей), а сами объекты размещаются отдельно.
Ключевые особенности:
- Плотное расположение: Все поля структур расположены последовательно друг за другом. Это обеспечивает отличную локальность данных и эффективность при обработке в циклах (например, с помощью
Span<T>). - Отсутствие накладных расходов на ссылки: Нет дополнительных указателей на каждый элемент.
- Значимая семантика: При копировании массива (например, через
Clone()) копируются сами значения структур, а не ссылки.
Пример:
public struct Point { public int X; public int Y; }
Point[] points = new Point[1000];
// В памяти это один непрерывный блок размером ~ 1000 * (sizeof(int) * 2).
// Доступ к points[500].Y выполняется очень быстро за счет вычисления смещения.
Важное замечание: Если структура содержит ссылочные типы (например, string), то сами эти объекты хранятся отдельно в куче, а в массиве хранится только ссылка на них.