protobuf 的内存如何全部释放

2021-08-06 10:53:09 +08:00
 zuoanyx

最近发现 protobuf 2.6.1 消息对象在出了作用域后,虽然析构函数会把它析构,但是内存貌似没有完全还给系统。

测试程序比如往 vector<protoObject> 里放了 10000 个 proto 消息(space used: 278388656),但是当它出了作用域后,内存并没有降低到 push_back 消息之前的内存,大概还有 140MB 的内存占用,即使我 shutDownProtobufLibrary 后也还是会有差不多的内存占用。

因为目前要先做一个大的 proto 消息(由很多小的 repeated proto 消息组成,小的 repeated 又有很多小消息组成),所以希望是做完后,小的 proto 消息都析构然后空间还给系统,只保留最后的大 proto 消息,但是看起来这个组合大的 proto 消息的函数结束后(目前把大消息也析构),内存并没有全部还给系统。因为消息之间有组合关系比较复杂,除了一些没法 move 的都 move 了。

问题: C++ protobuf 组完消息再让消息析构后,内存占用无法回到最开始的时候,有什么办法可以释放这一部分内存给系统吗?

2533 次点击
所在节点    C++
3 条回复
ysc3839
2021-08-06 10:57:20 +08:00
用工具检查内存泄漏,没泄漏的话说明不是 protobuf 的锅。
wutiantong
2021-08-06 11:03:33 +08:00
你的实验缺乏说服力
nicebird
2021-08-06 11:38:37 +08:00
进程占用内存没有恢复吗?这种情况很正常,gilibc 内的内存池可能没把内存还给系统。

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

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

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

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

© 2021 V2EX