相关疑难解决方法(0)

什么是内存碎片?

我听说在C++动态内存分配的上下文中使用了几次"内存碎片"这个术语.我发现了一些关于如何处理内存碎片的问题,但找不到直接处理它本身的问题.所以:

  • 什么是内存碎片?
  • 如何判断内存碎片是否对我的应用程序有问题?什么样的计划最容易受到影响?
  • 处理内存碎片的常用方法有哪些?

也:

  • 我听说使用动态分配可以增加内存碎片.这是真的?在C++的上下文中,我理解所有标准容器(std :: string,std :: vector等)都使用动态内存分配.如果在整个程序中使用它们(特别是std :: string),内存碎片更可能是一个问题吗?
  • 如何在STL繁重的应用程序中处理内存碎片?

c++ memory heap fragmentation

190
推荐指数
7
解决办法
7万
查看次数

glibc 应用程序保留未使用的内存直到退出之前

我有一个在 Linux(Centos 7)上运行的 C++ 应用程序(gcc 4.9.1,glibc 2.17)。它使用各种第三方库,尤其是 Boost 1.61。当应用程序运行时,我可以通过htop'sVIRTRES列,或ps命令等观察它的内存使用量稳步增加。如果我让它运行足够长的时间,它将使用大量的内存并淹没盒子。

听起来像是泄漏,但它通过valgrind时只泄漏了几个字节,所有这些都在我期望的地方。调试打印消息表明程序流程符合预期。

通过调试器进一步挖掘,我发现__run_exit_handlersmain. 我可以逐步执行各种调用,free因为它通过全局析构函数链工作。完成这些之后,我只观察到明显内存使用量的最小向下变化。然后,最后它调用_exit(),然后才立即将内存恢复到操作系统。

任何人都可以向我提供有关如何进行调试的其他提示吗?为什么我的程序不还给那个内存?

c++ linux memory-leaks glibc

6
推荐指数
1
解决办法
2292
查看次数

标签 统计

c++ ×2

fragmentation ×1

glibc ×1

heap ×1

linux ×1

memory ×1

memory-leaks ×1