为什么在编译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 无法拥有大量非平凡类类型的相同问题。