Структура данных на 4 миллиарда элементов

Мне нужен обычный массив со значениями true/false размерности uint ( > 4млрд), но когда я пытаюсь обратиться к элементу > int.MaxValue (хотя обращаюсь по индексу uint), то компилятор выдает ошибку.

System.OverflowException: "Array dimensions exceeded supported range."

uint x = 4000000000;
bool[] b = new bool[x];
Console.WriteLine(b[x - 1].ToString());

Насколько я понял, в clr специально стоит такое ограничение, но как эту проблему (кроме как подход маршала через небезопасный код) решить я так и не придумал. Какое решение тут можно придумать?


Ответы (1 шт):

Автор решения: Михаил Проказин

Сложно просить систему аллоцировать 4 000 000 000 байт (bool занимает 8 бит) подряд.

Возможно больше, элементы массива могут быть "выравнены" в соответствии с разрядностью процессора, если я не ошибаюсь. Тогда будет (4 миллиона * разрядность процессора) бит подряд.

Такая проблема решается всего одним способом - не просить выделять целый блок памяти, а сегментировать его - проще говоря, использовать связный список!
System.Collections.Generic.LinkedList не имеет подобных ограничений.

Если нужно больше скорости - можно использовать связный список из массивов по миллиарду элементов, например.

→ Ссылка