初始化大型std :: arrays时编译器挂起

Geo*_*ard 6 c++ arrays c++11

我需要初始化一个非常大的多维std::array数据:

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;
};
Run Code Online (Sandbox Code Playgroud)

如果你试图实例化它,G ++ 4.8.2扼杀:它消耗所有可用的内存,不会返回.也就是说,编译器挂起,我永远不会得到可执行文件. 为什么是这样? 请注意,clang ++没有问题.

注意:我完全意识到将这么多数据放在堆栈上会溢出它. 在堆上初始化它的最佳方法是什么? 我认为制作space一个引用(分配内存)是最好的方法,但我无法弄清楚语法.

Who*_*aig 2

好吧,我无法解释为什么 g++ 对此感到困惑,但在你解决这个问题之前,请在你的成员声明中考虑这一点:

std::vector<std::array<std::array<std::unique_ptr<Thing>,size>,size>> space;
Run Code Online (Sandbox Code Playgroud)

并在构造函数初始值设定项列表中:

World() : space{size}
Run Code Online (Sandbox Code Playgroud)

这至少应该让你编译并将所有这些移动到堆中。注意:这最好是 64 位进程。我将不得不寻找为什么 g++ 正在做我怀疑它正在做的事情。