C++ delete 对象但内存没被回收?

2018-12-13 12:09:49 +08:00
 zhiqiang

这个对象是一个 std::vector<boost::circular_buffer>,我建了几千个这种对象,在 new 时检查内存,大概会增加占用了 10G 内存。

但随后 delete 这些对象,内存却没有释放。导致程序多来回几次之后占用上白 G 内存然后就挂了。

不知道有人遇到过同样的案例没?

系统:ubuntu 16.04, gcc 5.4, boost 1.0.0.68 。

检查程序实时占用的内存我是看 /proc/self/status 的 VmRSS: 那一行。写了一个函数在 new 和 delete 前后实时获取和显示这个值。

还有一个奇怪的现象,上面占用内存是在程序多调用了一个模块( dlopen 了一个 so 文件)后才会出现。如果没有那个模块,内存增减都是正常的。而这个模块,里面并未操作这些对象。

4639 次点击
所在节点    C
22 条回复
wutiantong
2018-12-14 17:28:59 +08:00
@zhiqiang 就感觉你一直在处理好大一个烂摊子。。。
zhiqiang
2018-12-14 17:48:47 +08:00
@wutiantong 哈哈,可是这烂摊子都是我写的啊。

感觉项目一大,各种坑会不断冒出来。见得多就好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/517172

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX