Верно. Размер отдельного объекта не может превышать 2 ГБ .
Как и в 32-битных операционных системах Windows, существует ограничение в 2 ГБ на размер объекта, который вы можете создать при запуске 64-битного управляемого приложения { {1}} в 64-битной операционной системе Windows.
В этом вопросе есть дополнительные сведения и некоторые полезные ссылки: Размер отдельных объектов по-прежнему ограничен 2 ГБ в CLR 4.0?
В версиях .NET до 4.5 максимальный размер объекта составляет 2 ГБ. Начиная с версии 4.5, вы можете выделять более крупные объекты, если включен gcAllowVeryLargeObjects . Обратите внимание, что ограничение для string
не затронуто, но «массивы» должны охватывать и «списки», так как списки поддерживаются массивами.
Я бы подумал, что предел может быть на указателе. Я думал, что используемый индекс должен быть целым числом, чтобы что-либо большее, чем целое число, не работало, если бы у них не было способа обойти это. Так что это будет 4294967296 элементов. Не уверен, что это хотя бы наполовину правда. Я хотел бы знать ответ сам.
РЕДАКТИРОВАТЬ: Как отметил Томтом, целое число обычно подписывается, если они не используют целое число без знака. Таким образом, половина из 4294967296 или 2147483648 примерно.
Надеюсь на эту помощь: http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx
т.е.
- В качестве индекса используется int, максимальное значение которого равно 2 147 483 647 (2 ГБ)
- Это сделано по замыслу. 2.
Сначала вы столкнетесь с практическим ограничением - выделить массив размером 2 ГБ практически невозможно. Практические ограничения, с которыми я столкнулся, находятся в районе отметки 800 МБ НА ЗАПУСКЕ ПРОГРАММЫ - после этого они резко снижаются.
Все, что больше 64 Мбайт, является удачей для 32-битной версии - куча больших объектов не дефрагментируется, поэтому вам нужно 65 Мбайт свободным целиком, иначе выделение не удастся.
Теоретические ограничения:
Но если серьезно, практические последствия гораздо шире.
Для .NET 4.0 .... рассмотрите возможность использования файлов с отображением памяти;)