【问题标题】:Efficient C pool allocator?高效的 C 池分配器?
【发布时间】:2011-05-12 19:38:15
【问题描述】:

我目前正在尝试用 C 语言编写一个 2D 场景图,我需要决定一种存储子节点的方式。我预计读取次数非常多,写入次数很少,因此由于引用的空间局部性差,因此链表是不可能的,并且每次使用 realloc 添加子节点可能会将空闲列表碎片化为遗忘。池分配器似乎是最好的解决方案,但我似乎找不到任何可以使用的实现。有谁知道一个分配器可以有效地处理数百个小的structs 的随机分配和释放,或者可能是更好的分配方案?

【问题讨论】:

    标签: c arrays dynamic memory-management


    【解决方案1】:

    我正准备将TLSF 部署为实时分配器。我还没有机会分析它的性能,但它似乎有效,license 是对的。

    根据他们的文档,它的操作执行“x86 架构中最多 168 条处理器指令”。它以单个 .c 文件的形式出现,无需在我的系统上进行修改即可编译。

    【讨论】:

    • @CAFxX - 耻辱。谷歌为我找到了一些替代网站,但似乎没有一个是官方的。希望这会改变。
    • 耶!感谢您的修复,@Electro。给你一个半随机的赞成票。粉笔再次赢得众包知识。
    • @T.E.D.好吧,我确实喜欢偶尔回顾一下我自己的问题 - 不能让链接腐烂:P
    • 感谢您的提示。在我的非正式基准测试中,它比 glibc 的 malloc 高出 25% 或更多。但free 的速度稍慢。不幸的是,当您尝试使内存池大小为 2gb 或更大时,它会出现段错误。
    • @BjörnLindqvist - ...它立即告诉我 - 有符号的 32 位整数正在某处使用。希望它可以修复。 32 位系统现在基本上已经过时了,除了特殊用途。
    【解决方案2】:

    看看halloc,它可能会有所帮助。

    http://swapped.cc/halloc/

    【讨论】:

    • halloc 看起来很有趣,但它仍然可以在 malloc 之上运行,因此碎片问题仍然存在,尽管我认为它可能证明作为池分配器的起点很有用。
    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2014-09-08
    • 2013-10-28
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    相关资源
    最近更新 更多