I'm trying to create an array of byte
s whose length is UInt32.MaxValue
. This array is essentially a small(ish) in-memory database:
byte[] countryCodes = new byte[UInt32.MaxValue];
On my machine, however, at run-time, I get a System.OverflowException
with "Arithmetic operation resulted in an overflow".
What's the deal? Do I need to use an unsafe
block and malloc
? How would I do that in C#?
The current implementation of System.Array
uses Int32
for all its internal counters etc, so the theoretical maximum number of elements is Int32.MaxValue
.
There's also a 2GB max-size-per-object limit imposed by the Microsoft CLR.
A good discussion and workaround here...
And a few related, not-quite-duplicate, questions and answers here...
On .NET 4.5 The maximum instantiatable length of a byte array is: 2147483591, or 56 less than int.MaxValue. Found via:
for (int i = int.MaxValue; i > 0; i--) { try { byte[] b = new byte[i]; Console.Out.WriteLine("MaxValue: " + i); Environment.Exit(0); } catch (Exception ignored) {} }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With