我写了一个数字运算算法.这个想法是:
似乎程序慢慢占用内存所以我怀疑内存泄漏.我曾尝试过来自英特尔的Clang和Pointer Checker的Address Sanitizer,但他们没有找到任何东西.
现在,我正在调查我的Activity Monitor中的内存消耗(我正在运行OSX,但是我从Unix命令"top"获得了相同的内存使用情况)并且在调用big函数之前,该程序需要2 MB.运行该功能时,程序需要120 MB.奇怪的是,当程序结束大功能并返回循环内部时,它现在需要37 MB!然后,当它返回到大功能时,它需要130 MB.再次回到循环中,需要36 MB,然后在大功能中需要140 MB ...
所以它正在逐渐消失,但不是常规模式.我应该如何信任"top"中的内存使用情况?
内存碎片可以增加内存使用而不会出现内存泄漏吗?
我让程序一夜之间运行,这是我得到的数据:
因此,似乎分配和释放内存(大约120 MB)的函数似乎每次调用时"泄漏"1 MB.
首先,确保在很长一段时间内(例如,如果一次迭代需要一分钟,运行几个小时),增长将继续.如果增长为asyptotes则没有问题.接下来我会试试valgrind
.然后,如果这没有帮助,你将不得不二进制搜索你的代码:注释掉位,直到增长停止.我将首先完全删除MKL
库的使用(如果你愿意,留下存根),看看会发生什么.接下来,将您的向量更改为std::vector
仅查看是否有帮助.在那之后你将不得不使用你的判断.
归档时间: |
|
查看次数: |
472 次 |
最近记录: |