Максимальное количество элементов в массиве и максимальное значение индексатора

сегодня я начал задаваться вопросом о чем-то в 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.