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

Code won't execute unless cout is used

本文关键字:代码 执行 cout      更新时间:2023-10-16

我编写了一个非常简单的程序,以了解在内存中分配许多对象时它的行为。它运行得很好,如果有足够的时间,它将消耗我计算机的所有内存,除非删除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

编辑:我在工作时匆忙发布了这个问题,很抱歉粗心大意。

没有 std::cout行,打开优化,编译器确定有一个更快的算法,相当于你写的逻辑。

更快的算法是"do nothing"


注意:这是可能的,因为您的编译器假设"内存不足"场景不是期望的副作用。因此,更快的算法是有效的,即使它降低了内存耗尽的可能性。