today I started wondering about something in the MSDN. This article demonstrates, how one can increase the memory allocatable by an array under .NET 4.5 and x64. This is a nice feature, but something in the description provided by Microsoft baffeles me.
Under the section "Remarks" they say, that:
The maximum index in any single dimension is 2,147,483,591 (0x7FFFFFC7) for byte arrays and arrays of single-byte structures, and 2,146,435,071 (0X7FEFFFFF) for other types.
Since I mainly have int[]
or double[]
the latter number is relevant for my indexing. I can create an array with int[] TestArray = new int[2146435071]
, which is fine. However, under the same section Microsoft states:
The maximum number of elements in an array is UInt32.MaxValue.
Which is (according to the MSDN):
The value of this constant is 4,294,967,295; that is, hexadecimal 0xFFFFFFFF.
Now. If I get that right, I can have an array with up to 4,294,967,295 elements (for example ints
) but due to the array being indexed by an int
and not an uint
I am not able to access the "upper" half of my data?
This confuses me a lot, sice it seems I am missing something essential here.
I hope you can enlighten me
Kind Regards
EDIT:
I understand that I can create multi-dimensional arrays, but an array of length 2e9 an width 2 seems a bit stupid. Aren't multi-dimensional arrays mapped to one-dimensional ones anyway?