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

2016-04-20 12:56:07 +08:00
 tthy211
2595 次点击
所在节点    C
10 条回复
kingddc314
2016-04-20 13:07:00 +08:00
可以参考 jemalloc 之类
aaaron7
2016-04-20 13:22:36 +08:00
用 pool 啊,常规思想
eliteYang
2016-04-20 13:29:37 +08:00
可以使用 jemalloc 或者 tcmalloc 来处理,例如定时回收啊,托管内存管理,内存池,我们用了定时回收,不过在 win7 上表现不明显,现在 windows 的内存管理越做越好了, linux 上比较明显。可以参考我们服务器框架中的使用, https://github.com/ketoo/NoahGameFrame
xylophone21
2016-04-20 13:54:48 +08:00
从内存碎片这个角度来讲,作为一个通用的 malloc
自己实现能做的 malloc 都能做, malloc 能做到自己实现却不能做,维度不同啊。
fy
2016-04-20 14:19:53 +08:00
直接用现成的分配器库即可
yuriko
2016-04-20 18:48:31 +08:00
我记得这是我以前 CSAPP 的课后作业
owt5008137
2016-04-20 22:32:48 +08:00
想要通用,看看 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
2016-04-21 07:22:54 +08:00
@yuriko 哈哈哈哈, same here
yuriko
2016-04-21 14:01:15 +08:00
@yankbytes 后来我抄了一份 08 级学长写的,跑分大概在 80+
yankbytes
2016-04-22 02:18:30 +08:00
@yuriko 基本上抄抄改改,用了双向循环链表。。被虐太深所以现在可耻地写前端去了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/272501

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX