Максимальное количество элементов в массиве и максимальное значение индексатора
сегодня я начал задаваться вопросом о чем-то в MSDN. в этой статье демонстрирует, как можно увеличить память, выделяемую массивом под .NET 4.5 и x64. Это хорошая функция, но что-то в описании, предоставленном Microsoft baffeles me.
в разделе "замечания" они говорят, что:
максимальный индекс в любом одиночном измерении составляет 2,147,483,591 (0x7FFFFFC7) для байтовых массивов и массивов однобайтовых структур, и 2,146,435,071 (0X7FEFFFFF) для других типов.
так как у меня в основном есть int[]
или double[]
последнее число имеет отношение к my индексации. Я могу создать массив с помощью int[] TestArray = new int[2146435071]
, это хорошо. Однако в том же разделе Microsoft заявляет:
максимальное количество элементов в массиве-UInt32.Максвеллову.
который (согласно MSDN):
значение этой константы 4,294,967,295; то есть шестнадцатеричный 0xFFFFFFFF.
сейчас. Если я правильно понял, у меня может быть массив с до 4,294,967,295 элементами (например ints
) но из-за массива, индексируемого int
, а не uint
Я не могу получить доступ к "верхней" половине моих данных?
это меня очень смущает, sice кажется, я упускаю что-то важное здесь.
Я надеюсь, что вы можете просветить меня
вид С уважением
EDIT:
Я понимаю, что могу создавать многомерные массивы, но массив длины 2e9 и ширины 2 кажется немного глупым. Разве многомерные массивы не сопоставлены с одномерными?
1 ответов
максимальный индекс в любом одном измерении - это 2,147,483,591
помните, что массивы могут иметь несколько измерений, так что вы мог бы есть 2-D массив, который имеет до 4,294,967,295 элементов, но каждого измерения может иметь максимальную длину 2,147,483,591.
таким образом, вы можете иметь массив 2,147,483,591 X 2, но не массив 1,000,000 X 1,000,000.