V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zuoanyx
V2EX  ›  C++

protobuf 的内存如何全部释放

  •  
  •   zuoanyx · 2021-08-06 10:53:09 +08:00 · 2492 次点击
    这是一个创建于 1206 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近发现 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 组完消息再让消息析构后,内存占用无法回到最开始的时候,有什么办法可以释放这一部分内存给系统吗?

    3 条回复    2021-08-06 11:38:37 +08:00
    ysc3839
        1
    ysc3839  
       2021-08-06 10:57:20 +08:00   ❤️ 1
    用工具检查内存泄漏,没泄漏的话说明不是 protobuf 的锅。
    wutiantong
        2
    wutiantong  
       2021-08-06 11:03:33 +08:00
    你的实验缺乏说服力
    nicebird
        3
    nicebird  
       2021-08-06 11:38:37 +08:00
    进程占用内存没有恢复吗?这种情况很正常,gilibc 内的内存池可能没把内存还给系统。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2729 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 10:03 · PVG 18:03 · LAX 02:03 · JFK 05:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.