2013-08-26 62 views
0

目前我分析一个C++应用程序及其内存消耗。在某个函数调用之前和之后检查进程的内存消耗是可能的。但是,由于技术原因或为了提高效率,操作系统(Linux)似乎不仅分配了所需的字节数,而且还分配了更多的数据,以后可以由应用程序使用。这使得很难分析应用程序的内存行为。内存调试

是否有解决方法?是否可以将Linux切换到只分配所需数量的字节/页面的模式?

+0

你衡量什么内存使用(例如堆或堆栈),怎么办?你用过valgrind吗? –

+0

我测量过程的虚拟大小。 Valgrind有一套有限的数字舍入模式,因此我的应用程序不会在Valgrind下运行。 – leftangle

+1

查看http://stackoverflow.com/questions/10540845/linux-heap-structure-and-the-behaviour-with-malloc-and-free接受的答案。 –

回答

1

,如果你使用malloc /新,分配器总是会ALLOC多一点字节比你的要求,因为它需要一定的空间,以尽自己的管家服务,还可以根据需要排列在页面上边界的字节数。分配的补充字节数量取决于实现。 你可以考虑使用诸如gperftools(谷歌)之类的工具来监视所使用的内存。

0

我想几年前检查过程内存韭菜。我写了一个非常小的调试器(它比听起来容易),只需将断点设置为malloc(),free(),mmap()...以及类似的函数(I在Windows下做,但在Linux下更简单 - 我在Linux中做了另一个目的!)。

每当一个断点达到我登录的功能参数,并继续执行程序...

通过处理日志文件(半自动)我能找到内存泄漏。

缺点:这是不可能的调试并行使用另一个调试该程序。