目前我分析了一个 C++ 应用程序及其内存消耗。在某个函数调用之前和之后检查进程的内存消耗是可能的。但是,出于技术原因或为了提高效率,操作系统(Linux)似乎不仅分配了所需的字节数,而且总是分配更多的字节数,这些字节可以稍后由应用程序使用。这使得分析应用程序的内存行为变得困难。
有解决方法吗?可以将 Linux 切换到只分配所需字节数/页数的模式吗?
如果您使用 malloc/new,分配器将始终分配比您请求的字节多一点的字节,因为它需要一些空间来进行内部管理,而且它可能需要对齐页面边界上的字节。分配的补充字节数量取决于实现。您可以考虑使用 gperftools (google) 等工具来监控所使用的内存。
几年前我想检查内存韭菜的过程。
我所做的如下:我编写了一个非常小的调试器(它比听起来更容易),它只是为 malloc()、free()、mmap() 和类似的函数设置断点(我在 Windows 下这样做了)但在 Linux 下它更简单——我在 Linux 中这样做是为了另一个目的!)。
每当到达断点时,我都会记录函数参数并继续执行程序...
通过处理日志文件(半自动),我可以发现内存泄漏。
缺点:无法同时使用另一个调试器来调试程序。