Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
高效的C池分配器?_C_Arrays_Dynamic_Memory Management - Fatal编程技术网

高效的C池分配器?

高效的C池分配器?,c,arrays,dynamic,memory-management,C,Arrays,Dynamic,Memory Management,我目前正试图用C编写一个2D场景图,我需要决定一种存储子节点的方法。我期望读的次数很多,写的次数很少,所以链表是不可能的,因为引用的空间位置很差,每次使用realloc添加子节点时,可能会将空闲列表分割为遗忘。池分配器似乎是最好的解决方案,但我似乎找不到任何可使用的实现。有谁知道一个分配器可以有效地处理几百个小型结构的随机ish分配和释放,或者更好的分配方案吗?看看halloc,它可能会有所帮助 我正准备部署为实时分配器。我还没有机会介绍它的性能,但它似乎起了作用,而且是正确的 根据他们的文档,

我目前正试图用C编写一个2D场景图,我需要决定一种存储子节点的方法。我期望读的次数很多,写的次数很少,所以链表是不可能的,因为引用的空间位置很差,每次使用
realloc
添加子节点时,可能会将空闲列表分割为遗忘。池分配器似乎是最好的解决方案,但我似乎找不到任何可使用的实现。有谁知道一个分配器可以有效地处理几百个小型
结构的随机ish分配和释放,或者更好的分配方案吗?

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

我正准备部署为实时分配器。我还没有机会介绍它的性能,但它似乎起了作用,而且是正确的


根据他们的文档,其操作执行“x86架构中最多168条处理器指令”。它是一个单独的.c文件,在我的系统上编译而不做任何修改。

halloc
看起来很有趣,但它仍然在
malloc
之上工作,所以碎片问题仍然存在,尽管我想它可能被证明是池分配器的一个有用的起点。@CAFxX-羞耻。谷歌为我找到了一些替代网站,但似乎没有一个是官方网站。希望这会改变。耶!谢谢你的修复,@Electro。给你一个半随机的向上投票。用粉笔为众包知识赢得另一场胜利。@T.E.D.嗯,我确实喜欢偶尔回顾一下我自己的问题-不能让链接腐烂:谢谢提示。在我的非正式基准测试中,它比glibc的
malloc
高出25%或更多。但是对于
免费版
,速度稍慢一些。不幸的是,当您试图使内存池的大小达到2gb或更大时,它会出错。@BjörnLindqvist-…这立即告诉我某处正在使用带符号的32位整数。希望它是可以修复的。32位系统现在基本上已经过时了,除了特殊用途。