奇怪的内存泄漏与大型动态阵列

时间:2012-03-18 18:27:02

标签: c++ arrays memory-leaks

我有以下代码

int main()
{
    int* myDynamicArray;
    myDynamicArray = new int[20000000];
    int numIte;
    cout << "number of iterations" << endl;
    cin >> numIte;
    for (int i = 0; i < numIte; ++i)
        foo(myDynamicArray);
    delete [] myDynamicArray;
    return 0;
 }

我不理解的是,当迭代输入的数量很大时,系统使用的内存会随着循环更多迭代而增加。这是正常的吗?

2 个答案:

答案 0 :(得分:1)

如果没有foo的完整定义,这个问题就无法回答。不过这里有一些想法...

myDynamicArray包含在某种形式的安全指针(可能是std :: auto_ptr)中,或者foo可能保持对指针std :: tr1的引用时,可能是个好主意: :shared_ptr的。

除非对foo构造函数/函数的调用导致分配额外的内存,否则没有理由建议增加循环迭代次数应该以任何方式影响程序运行时内存使用。

最后,您如何监控程序的运行时内存使用情况?在Windows任务管理器(或等效的)中查看数字并不是一个特别强大的解决方案,您可以尝试自己手动跟踪所有内存分配(通过覆盖new / malloc)来真正了解内存的时间,地点和内容在堆上分配。

答案 1 :(得分:1)

由于foo没有显示,因为它可能没有传入数组索引就没有意义调用它,我会猜测。换句话说,我猜测真实的foo接受某种数组索引或长度作为参数,并且它根据该索引访问myDynamicArray的元素。

如果这是真的(并且它不是foo泄漏内存的简单情况),那么您可能正在测量的是实际提交的内存量。分配是80MB,但是在访问阵列之前可能不会提交内存。因此,foo访问的数组越多,可能会导致更多的内存被提交。

相关问题