大型动态阵列的怪异内存泄漏
Weird Memory Leak with large dynamic array
我有以下代码
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;
}
我不明白的是,当输入的迭代次数很大时,系统使用的内存会随着循环次数的增加而增加。这正常吗?
由于foo
没有显示,而且它可能在没有传入数组索引的情况下调用它是没有意义的,所以我来猜测一下。换句话说,我猜测真正的foo
接受某种数组索引或长度作为参数,并基于该索引访问myDynamicArray
的元素。
如果这是真的(这不是foo
泄漏内存的简单情况),那么您可能要测量的是实际提交的内存量。分配的内存是80MB,但在访问数组之前可能不会提交内存。因此,foo
访问的数组越多,可能会导致提交更多的内存。
如果没有foo
的完整定义,这个问题是不可能回答的。然而,这里有一些想法。。。
最好将myDynamicArray
封装在某种形式的安全指针中,可能是std::auto_ptr,或者在foo
可能保留对指针std::tr1::shared_ptr的引用的情况下。
除非对foo
构造函数/函数的调用导致分配额外的内存,否则没有理由认为增加循环迭代次数会以任何方式影响程序运行时内存的使用。
最后,如何监控程序的运行时内存使用情况?在Windows任务管理器(或等效工具)中查看数字并不是一个特别稳健的解决方案,您可以尝试自己手动跟踪所有内存分配(通过覆盖new/malloc),以真正了解何时、何地以及在堆上分配了多少内存。
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- 瓦尔格林德的内存泄漏使用新的
- 无法找出我的代码中的内存泄漏
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 可视化 使用 VS Code 查找C++应用程序中的内存泄漏
- Shared_ptr双链接列表内存泄漏
- C++ 在类中使用常量引用文本时 O2 内存泄漏