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

自己实现 malloc ,有什么方法能尽可能减少内存碎片化?

  •  1
     
  •   tthy211 · 2016-04-20 12:56:07 +08:00 · 2556 次点击
    这是一个创建于 2939 天前的主题,其中的信息可能已经有所发展或是发生改变。
    10 条回复    2016-04-22 02:18:30 +08:00
    kingddc314
        1
    kingddc314  
       2016-04-20 13:07:00 +08:00 via Android   ❤️ 1
    可以参考 jemalloc 之类
    aaaron7
        2
    aaaron7  
       2016-04-20 13:22:36 +08:00   ❤️ 1
    用 pool 啊,常规思想
    eliteYang
        3
    eliteYang  
       2016-04-20 13:29:37 +08:00   ❤️ 1
    可以使用 jemalloc 或者 tcmalloc 来处理,例如定时回收啊,托管内存管理,内存池,我们用了定时回收,不过在 win7 上表现不明显,现在 windows 的内存管理越做越好了, linux 上比较明显。可以参考我们服务器框架中的使用, https://github.com/ketoo/NoahGameFrame
    xylophone21
        4
    xylophone21  
       2016-04-20 13:54:48 +08:00   ❤️ 1
    从内存碎片这个角度来讲,作为一个通用的 malloc
    自己实现能做的 malloc 都能做, malloc 能做到自己实现却不能做,维度不同啊。
    fy
        5
    fy  
       2016-04-20 14:19:53 +08:00
    直接用现成的分配器库即可
    yuriko
        6
    yuriko  
       2016-04-20 18:48:31 +08:00
    我记得这是我以前 CSAPP 的课后作业
    owt5008137
        7
    owt5008137  
       2016-04-20 22:32:48 +08:00 via Android
    想要通用,看看 jemalloc 和 tcmalloc 的设计。然后参考它搞个适用你们项目的出来。
    https://www.owent.net/QoH5w + 源码
    其实现在的 ptmalloc 性能也挺不错的,前提是开编译优化以后

    想要更高性能,自己做对象池。可以参考这个
    https://github.com/owent-utils/c-cpp/blob/master/include/DataStructure/StaticIdxList.h
    这是设计于用在共享内存里的,如果不需要支持共享内存可以参考这个
    https://github.com/owent-utils/c-cpp/blob/master/include/DataStructure/DynamicIdxList.h
    yankbytes
        8
    yankbytes  
       2016-04-21 07:22:54 +08:00
    @yuriko 哈哈哈哈, same here
    yuriko
        9
    yuriko  
       2016-04-21 14:01:15 +08:00
    @yankbytes 后来我抄了一份 08 级学长写的,跑分大概在 80+
    yankbytes
        10
    yankbytes  
       2016-04-22 02:18:30 +08:00
    @yuriko 基本上抄抄改改,用了双向循环链表。。被虐太深所以现在可耻地写前端去了。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   988 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:45 · PVG 04:45 · LAX 13:45 · JFK 16:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.