【发布时间】:2025-12-29 08:35:12
【问题描述】:
我正在运行一个长期运行的 C++ 应用程序,它分配不同的对象并将其存储在几个双端队列和映射中,并一次从这些数据结构中释放这些对象。我正在经历少量的内存增加(通常为 1 mb 到 2 mb) 日复一日。我已经运行了内存泄漏检测器 (valgrind),但我找不到任何可疑的内存泄漏。 我想知道问题是否出在存储对象的双端队列和映射上。 对象从数据结构中弹出后,deque 和 map 的内存是否会立即将内存释放给 OS? 谁能指出内存增加的解决方案或一般可能的原因?
【问题讨论】:
-
你确定不是对象的数量一直在增加吗?也就是说,您是否检查了所有容器的大小?
-
当您从容器中移除项目时,容器不会释放内存。因此,容器以最大容量保留所需的任何内存。如果你想释放内存,你必须明确地将数据移动到一个新的容器中。
-
是的,我检查了容器的大小。大小一直在一个恒定范围内,即,当一个对象从中弹出时,另一个对象被推送到数据结构中。对象已在范围内(25,000 到 25,050)。
-
@Galik 该评论是错误的。 vector 是这样,但其他容器不是。
标签: c++ memory dictionary memory-leaks deque