Ограничение на размер.Net Array

26
задан Graviton 10 March 2010 в 08:34
поделиться

5 ответов

Верно. Размер отдельного объекта не может превышать 2 ГБ .

Как и в 32-битных операционных системах Windows, существует ограничение в 2 ГБ на размер объекта, который вы можете создать при запуске 64-битного управляемого приложения { {1}} в 64-битной операционной системе Windows.

В этом вопросе есть дополнительные сведения и некоторые полезные ссылки: Размер отдельных объектов по-прежнему ограничен 2 ГБ в CLR 4.0?

13
ответ дан 28 November 2019 в 07:25
поделиться

В версиях .NET до 4.5 максимальный размер объекта составляет 2 ГБ. Начиная с версии 4.5, вы можете выделять более крупные объекты, если включен gcAllowVeryLargeObjects . Обратите внимание, что ограничение для string не затронуто, но «массивы» должны охватывать и «списки», так как списки поддерживаются массивами.

23
ответ дан Marc Gravell 28 November 2019 в 07:25
поделиться

Я бы подумал, что предел может быть на указателе. Я думал, что используемый индекс должен быть целым числом, чтобы что-либо большее, чем целое число, не работало, если бы у них не было способа обойти это. Так что это будет 4294967296 элементов. Не уверен, что это хотя бы наполовину правда. Я хотел бы знать ответ сам.

РЕДАКТИРОВАТЬ: Как отметил Томтом, целое число обычно подписывается, если они не используют целое число без знака. Таким образом, половина из 4294967296 или 2147483648 примерно.

1
ответ дан uriDium 28 November 2019 в 07:25
поделиться

Надеюсь на эту помощь: http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx

т.е.

  1. В качестве индекса используется int, максимальное значение которого равно 2 147 483 647 (2 ГБ)
  2. Это сделано по замыслу. 2.
0
ответ дан 28 November 2019 в 07:25
поделиться

Сначала вы столкнетесь с практическим ограничением - выделить массив размером 2 ГБ практически невозможно. Практические ограничения, с которыми я столкнулся, находятся в районе отметки 800 МБ НА ЗАПУСКЕ ПРОГРАММЫ - после этого они резко снижаются.

Все, что больше 64 Мбайт, является удачей для 32-битной версии - куча больших объектов не дефрагментируется, поэтому вам нужно 65 Мбайт свободным целиком, иначе выделение не удастся.

Теоретические ограничения:

  • полезная память, особенно 32-битная.
  • 32-битное числовое пространство для индекса (0 вверх - отрицательные числа для массивов запрещены, ЕСЛИ ВЫ НЕ ИГРАЕТЕ В SMART IN CREATION). Вы можете создавать массивы, разрешающие отрицательные числа, но не со стандартным синтаксисом C # - только с отражением.
  • 2 ГБ на объект.

Но если серьезно, практические последствия гораздо шире.

Для .NET 4.0 .... рассмотрите возможность использования файлов с отображением памяти;)

4
ответ дан 28 November 2019 в 07:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: