对象大型数组的内存使用量极大



为什么在编译Sample 1时,它使用了我所有的RAM并使我的计算机崩溃,但Sample 2却立即编译而无需这样做?

示例 1:

class Foo
{
    int a = 0;
};
class Test
{
    Foo foo[4000000] = {};
};
int main()
{
    Test t;
}

示例 2:

class Foo
{
    int a = 0;
};
int main()
{
    Foo foo[4000000] = {};
}

最后,有没有办法阻止样本 1 在编译时使用大量 RAM?我正在使用gcc version 5.3.0,我用-std=c++11编译了上面的内容。请注意,class Test只需要 16 MB 的内存。

对于任何

绝对是一个错误。我可以在我的系统上使用 5.3 重现这一点。RAM 使用率迅速增加,但我关闭了程序,因为我不想让我的系统崩溃。另一方面,如果我在 Clang 3.8 中编译它,它几乎可以立即编译。

我建议向 gcc.gnu.org/bugzilla 报告此事。如此处所示,请查看错误报告 59659、68203 和 56671。我很确定它们都指向了 GCC 无法拥有大量非平凡类类型的相同问题。

最新更新