V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zuoanyx
V2EX  ›  C++

protobuf 的内存如何全部释放

  •  
  •   zuoanyx · Aug 6, 2021 · 3305 views
    This topic created in 1734 days ago, the information mentioned may be changed or developed.

    最近发现 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 replies    2021-08-06 11:38:37 +08:00
    ysc3839
        1
    ysc3839  
       Aug 6, 2021   ❤️ 1
    用工具检查内存泄漏,没泄漏的话说明不是 protobuf 的锅。
    wutiantong
        2
    wutiantong  
       Aug 6, 2021
    你的实验缺乏说服力
    nicebird
        3
    nicebird  
       Aug 6, 2021
    进程占用内存没有恢复吗?这种情况很正常,gilibc 内的内存池可能没把内存还给系统。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3287 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 12:33 · PVG 20:33 · LAX 05:33 · JFK 08:33
    ♥ Do have faith in what you're doing.