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

大量的对象创建,内存申请,有没有好的办法优化

  •  1
     
  •   boynanboy · 2021 年 4 月 30 日 · 3114 次点击
    这是一个创建于 1731 天前的主题,其中的信息可能已经有所发展或是发生改变。
    求教各路大神们,如题,已经使用了 tcmalloc 和 protobuf arena,
    多线程场景下,每个线程内部都会存在大量的对象创建(通过 arena createMessage ),对象结构复杂暂时无法优化,目前性能依旧很差,耗时很高,有没有好的方法
    8 条回复    2021-05-04 12:55:52 +08:00
    wanguorui123
        1
    wanguorui123  
       2021 年 4 月 30 日 via iPhone
    对象池
    catror
        2
    catror  
       2021 年 4 月 30 日 via Android
    放个火焰图出来看看
    araraloren
        3
    araraloren  
       2021 年 4 月 30 日
    只能预先申请了,对象池
    gBurnX
        4
    gBurnX  
       2021 年 4 月 30 日
    1.这种问题,先别急着用别人推荐的 xxx,自己要先思考,一步一步来。
    ch2
        5
    ch2  
       2021 年 4 月 30 日
    池化,一次申请大量对象,用到的时候从池子里取
    gBurnX
        6
    gBurnX  
       2021 年 4 月 30 日
    不小心按了发送,继续上面的:

    2.先看看目前瓶颈在哪。

    可以通过对照法。比如,假设这些对象,已经在 CPU cache 中创建完毕,甚至已经在物理内存的一块私有区域被创建成功后,把它移动到内存的另一块可用位置,需要多少时间。

    然后对比你程序中的这一块业务,看看有没有速度差。有的话,差了多少。顺序与随机两种方式都要测。

    接着,测试一下上述业务的单逻辑线程,单物理核,单 CPU 的成绩。然后再测测并行的成绩。并行最好别带锁,每个 CPU 、每个逻辑线程,只管理自己对应的内存条。

    测试后,把测试数据,与你程序的数据,都放出来看看。
    zzzzzzzzzp
        7
    zzzzzzzzzp  
       2021 年 4 月 30 日
    pb 的 string 不能分配在 arena 上,string 很多用 arena 的效果一般
    NealLason
        8
    NealLason  
       2021 年 5 月 4 日
    libumem
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3146 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:41 · PVG 08:41 · LAX 16:41 · JFK 19:41
    ♥ Do have faith in what you're doing.