我需要初始化一个非常大的多维 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;
};
如果您尝试实例化此内容,G++ 4.8.2会崩溃:它会消耗所有可用的内存并且不会返回。也就是说,编译器会挂起,我永远得不到可执行文件。为什么会这样呢?请注意,clang++没有任何问题。
注意:我完全意识到将如此多的数据放在堆栈上可能会导致堆栈溢出。最佳的初始化方式是什么?我认为将
space
作为引用(指向已分配的内存)是最好的方法,但我无法弄清楚语法。
World world;
,则会消耗略多于1000^3 * sizeof(std::unique_ptr<>)
字节。在 64 位系统上,这将是至少 7.629 GB。所以,是的,我会说你已经超过了自动变量空间限制的界限。我非常想知道这个问题的解决方案是什么。 - WhozCraigstd::array
生成初始化器代码。 - Casey