8

For my programming exercise in C#, I am trying to create an array of long, with a length of 0x1fffffff (536,870,911 in base10), however I got System.OutOfMEmoryException.

For the build, I targeted x64 system, and I am running VisualStudio2008 on Windows7 x64 with 8GB of RAM. It should be enough memory for the array (it works on JDK x64 and CPP project)

Any thoughts ?

        const long MAX = 0x1fffffff; // 536870911 in base10
        program.arr = new long[MAX];
        for (long i = 0; i < MAX; i++)
        {
            program.arr[i] = i;                
        }
2
  • FYI, it's called "C#", not "CSharp". Commented Apr 26, 2011 at 14:34
  • 5
    You can't make an object that big. But even if you could, you seem to also be suffering from the misapprehension that RAM determines how much memory you can allocate. It does not, and has not for decades. Amount of RAM limits how fast you'll be able to access that memory. Having big RAM is a performance optimization; memory allocations are actually best thought of as allocations out of the page file. Remember, when you allocate memory you are allocating virtual memory, not hardware memory. Commented Apr 26, 2011 at 15:42

3 Answers 3

29

The CLR doesn't support any single object of size greater than about 2GB. You're asking for an array of 4,294,967,288 bytes - over twice what's supported.

You can use that much memory, but not in a single object (such as an array).

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

Comments

5

It is hard to recommend any sort of meaningful alternative since you don't state what you're trying to achieve, just what you can't do.

That said if you really do need something which is a fast contiguous view into a flat address space bigger than 2GB in size you could use MemoryMappedFile.

It would help if you indicated what is meant to be going in this lump of memory, why the address space itself must be contiguous (are you passing a pointer to it to unmanaged code for example) and why it needs flat addressing.

Comments

0

Make a subset of Array then fill the array

yourary[]

masterarray[] <------ Fill youraray[] upto 2gb of buffer then add it in the masterarray

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.