我听说在C++动态内存分配的上下文中使用了几次"内存碎片"这个术语.我发现了一些关于如何处理内存碎片的问题,但找不到直接处理它本身的问题.所以:
也:
我有一个在 Linux(Centos 7)上运行的 C++ 应用程序(gcc 4.9.1,glibc 2.17)。它使用各种第三方库,尤其是 Boost 1.61。当应用程序运行时,我可以通过htop'sVIRT和RES列,或ps命令等观察它的内存使用量稳步增加。如果我让它运行足够长的时间,它将使用大量的内存并淹没盒子。
听起来像是泄漏,但它通过valgrind时只泄漏了几个字节,所有这些都在我期望的地方。调试打印消息表明程序流程符合预期。
通过调试器进一步挖掘,我发现__run_exit_handlers在main. 我可以逐步执行各种调用,free因为它通过全局析构函数链工作。完成这些之后,我只观察到明显内存使用量的最小向下变化。然后,最后它调用_exit(),然后才立即将内存恢复到操作系统。
任何人都可以向我提供有关如何进行调试的其他提示吗?为什么我的程序不还给那个内存?