除非使用 cout,否则代码不会执行
Code won't execute unless cout is used
我编写了一个非常简单的程序来查看在内存中分配多个对象时它的行为。
它运行良好,如果有足够的时间,它将消耗我计算机的所有内存,除非 cout
语句被删除。如果没有该行,程序将在初始化后立即退出。为什么?
代码:
#include <iostream>
class Test
{
long long test1[10];
long long test2[10];
long long test3[10];
long long test4[10];
long long test5[10];
};
int main()
{
for (int i = 0; i <= 500000; ++i)
{
new Test;
new Test;
new Test;
new Test;
std::cout << i << "\n"; // Program won't work as desired without this
}
return 0;
}
设置:Visual Studio 2013,发布,x64,静态 Crt
编辑: 上班时间匆忙发了这个问题,抱歉粗心。现在是对的。
没有 std::cout
行和 优化打开,你的编译器确定 有是一个更快的算法,相当于你写的逻辑。
更快的算法是"do nothing"。
注意:这是可能的,因为您的编译器假设 "out of memory" 场景不是预期的副作用。因此,更快的算法是有效的,即使它降低了 运行 内存不足的可能性。
我编写了一个非常简单的程序来查看在内存中分配多个对象时它的行为。
它运行良好,如果有足够的时间,它将消耗我计算机的所有内存,除非 cout
语句被删除。如果没有该行,程序将在初始化后立即退出。为什么?
代码:
#include <iostream>
class Test
{
long long test1[10];
long long test2[10];
long long test3[10];
long long test4[10];
long long test5[10];
};
int main()
{
for (int i = 0; i <= 500000; ++i)
{
new Test;
new Test;
new Test;
new Test;
std::cout << i << "\n"; // Program won't work as desired without this
}
return 0;
}
设置:Visual Studio 2013,发布,x64,静态 Crt
编辑: 上班时间匆忙发了这个问题,抱歉粗心。现在是对的。
没有 std::cout
行和 优化打开,你的编译器确定 有是一个更快的算法,相当于你写的逻辑。
更快的算法是"do nothing"。
注意:这是可能的,因为您的编译器假设 "out of memory" 场景不是预期的副作用。因此,更快的算法是有效的,即使它降低了 运行 内存不足的可能性。