当我们不知道可用内存的大小时,如何实现伙伴分配器?

时间:2013-09-17 04:50:30

标签: c memory memory-management

如果内存总大小未知,如何实现a buddy allocator?即,如果我使用brk / sbrk实现malloc函数,我无法知道我的进程可用的内存总大小,是吗?由于虚拟内存,我的内存空间的总大小甚至都不为人所知,是吗?

你如何使用伙伴分配器这样的东西?你只是假设一个合理的大小来构建一个伙伴分配器树,并且如果你需要的话以某种方式增长它吗?

1 个答案:

答案 0 :(得分:1)

最简单的方法是首先使用较少的内存来初始化好友分配器。当内存不足以进行下一次分配时,将先前分配的内存的大小加倍,并获得一个新的更大的伙伴分配器。


我想知道你为什么必须将buddy系统用于内存分配器?大多数现代分配器维护用于小分配的slab结构,并使用mmap调用处理大量分配。该方案比伙伴系统更快,内存效率更高。