Compiler hang when initializing large std::arrays

arrays, c++, c++11

Solution

Ok, i can't explain the nuance of why g++ is puking on this, but until you work that out, consider this for your member declaration:

std::vector<std::array<std::array<std::unique_ptr<Thing>,size>,size>> space;

and in the constructor initializer list:

World() : space{size}

That should at least get you compiling and move all this to the heap. Note: this better be a 64bit process. I'm going to have to hunt to find out why g++ is doing what I suspect it is doing.

Problem

I need to initialize a very large multidimensional `std::array` of data: ``` class Thing; class World { public: World() : space{nullptr} {}; ~World() = default; private: static unsigned int const size = 1000; std::array<std::array<std::array<std::unique_ptr<Thing>, size>, size>, size> space; }; ``` If you try to instantiate this, G++ 4.8.2 chokes: it consumes all the available memory and will not return. That is, the compiler hangs and I never get an executable. Why is this? Note that clang++ has no trouble. Note: I fully realize that putting this much data on the stack can overflow it. What is the best way to initialize it on the heap? I think making `space` a reference (to allocated memory) would be the best way, but I can't figure the syntax out.

Original source

Related problems