【问题标题】:When creating a loop of new pointers, outputting the dereferenced pointer doesn't increase memory usage创建新指针循环时,输出取消引用的指针不会增加内存使用量
【发布时间】:2017-12-04 17:24:19
【问题描述】:

我创建了一个循环来尝试耗尽内存。这是奇怪的部分。当我这样运行它时,它会按预期工作并耗尽内存,并在几秒钟内超过 1gb。:

while(true){
   int *pointer66 = new int;
}

但是,当我添加这样的 cout 时,RAM 使用量保持一致(它会缓慢增加,因为控制台记录了输出是什么,但仅此而已,保持在几兆字节):

while(true){
   int *pointer66 = new int;
   cout << *pointer66;
}

发生了什么事?似乎 cout 正在防止内存泄漏? 我正在使用 Visual Studio 2005。

【问题讨论】:

    标签: c++ pointers visual-c++ memory-management memory-leaks


    【解决方案1】:

    您的假设是错误的 - std::cout 无法防止内存泄漏。原因可能是使用控制台输出时,您的周期运行速度比没有它时慢几个数量级。您可以尝试测量控制台输出时间并尝试反汇编生成的可执行文件,并发现在这两种情况下实际分配了内存。

    【讨论】:

    • 其实我才意识到你是对的。正在分配内存,但控制台输出严重减慢了它的速度。输出到控制台的东西越多,循环执行越慢。谢谢!
    猜你喜欢
    • 2016-12-01
    • 2010-10-25
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多