除非使用cout,否则代码将不会执行

时间:2015-05-26 16:05:40

标签: c++ compilation console-application compiler-optimization

我写了一个非常简单的程序,看看在内存中分配很多对象时它会如何表现。 它运行正常并且会在给定足够时间的情况下消耗我计算机的所有内存,除非删除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,Release,x64,Static Crt

编辑:我在工作时匆匆发布了这个问题,抱歉粗心。现在是对的。

1 个答案:

答案 0 :(得分:3)

没有std::cout行和 优化已启用,您的编译器正在确定有更快的算法&# 39;相当于你写的逻辑。

更快的算法&#34;什么都不做&#34;

注意:这是可能的,因为你的编译器假设一个&#34;内存不足&#34;情景不是所希望的副作用。因此,更快的算法是有效的,即使它降低了内存不足的可能性。