最近发现 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 组完消息再让消息析构后,内存占用无法回到最开始的时候,有什么办法可以释放这一部分内存给系统吗?
1
ysc3839 2021-08-06 10:57:20 +08:00 1
用工具检查内存泄漏,没泄漏的话说明不是 protobuf 的锅。
|
2
wutiantong 2021-08-06 11:03:33 +08:00
你的实验缺乏说服力
|
3
nicebird 2021-08-06 11:38:37 +08:00
进程占用内存没有恢复吗?这种情况很正常,gilibc 内的内存池可能没把内存还给系统。
|