最近发现 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 组完消息再让消息析构后,内存占用无法回到最开始的时候,有什么办法可以释放这一部分内存给系统吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.