27

I'm trying to create an array of bytes 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#?

1
  • 12
    I had no idea there were so many countries! Commented Jun 10, 2015 at 21:47

5 Answers 5

39

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...

Sign up to request clarification or add additional context in comments.

Comments

16

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)
    {}
}

Comments

3

Maximum length of a byte array is: 2130702268. for example:

var countryCodes = new byte[2130702268];

Comments

0

I wouldn't do this in the first place. Why would you want to set all that memory aside for this in-memory database? Wouldn't you rather want either a data structure which size increments as you go along (e.g. List<int>)? Or (if preferred) use an in-memory database like sqlite?

Comments

0

Use Array.MaxLength:

var countryCodes = new byte[Array.MaxLength];

Pressing F12 on Array.MaxLength reveals the value:

public static int MaxLength => 0X7FFFFFC7;

which is 2,147,483,591 bytes (56 bytes less than int.MaxValue)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.