Сегодня я начал задаваться вопросом о чем-то в MSDN. This article демонстрирует, как можно увеличить память, выделяемую массивом под .NET 4.5 и x64. Это приятная функция, но что-то в описании, предоставленном Microsoft, баффет меня.Максимальное количество элементов в массиве по сравнению с максимальным значением индексатора
В разделе «Примечание» они говорят, что:
Максимальный показатель в какой-либо одной размерности 2147483591 (0x7FFFFFC7) для байтовых массивов и массивов однобайтовых структур и 2,146,435,071 (0X7FEFFFFF) для другие типы.
Так как я в основном имею int[]
или double[]
последнее число имеет отношение к моей индексации. Я могу создать массив с int[] TestArray = new int[2146435071]
, что отлично. Однако в том же разделе говорится:
Максимальное количество элементов в массиве - UInt32.MaxValue.
Который (согласно MSDN):
Значение этой константы 4294967295; то есть шестнадцатеричный 0xFFFFFFFF.
Теперь. Если я получу это право, у меня может быть массив с до 4,294,967,295 элементов (например, ints
), но из-за того, что массив индексируется int
, а не uint
, я не могу получить доступ к «верхней» половине моих данных?
Это меня смущает, кажется, что мне не хватает чего-то существенного здесь.
Я надеюсь, что вы можете просветить меня
С наилучшими пожеланиями
EDIT:
Я понимаю, что я могу создавать многомерные массивы, а массив длины 2E9 шириной 2 кажется немного глупым , Разве многомерные массивы не отображаются на одномерные?
Я предполагаю, что «максимальное количество элементов» выше, потому что оно допускает многомерные массивы. 'new byte [4000000000]' не будет разрешено, но 'new byte [4000,1000000]' будет. – Douglas