如何在Linux平台上实现malloc
?
答案 0 :(得分:6)
在Linux中,malloc
基于两个功能:
brk
- 更改堆的大小。一旦增加了大小,就由你来管理堆。 注意:如果您管理堆,则正常的malloc
不能执行此操作。因此,这种方式需要停用所有对malloc
的调用(包括隐式调用,例如strdup
)。
mmap
- 从内核分配一个或多个页面(也可用于文件I / O)。当你有内存页面时,你可以以某种方式管理它们并将较小的部分返回给调用者。您可以与malloc
并行执行此操作 - 它将管理您获得的网页,您将管理您获得的网页。
答案 1 :(得分:3)
sbrk()
功能可能就是你要找的东西。它会根据您指定的字节数增加堆的大小。
一旦你获得了这个新的内存块,你可以选择管理分配和释放字节的方式。我个人认为二进制伙伴系统是一个很好的算法开始 - 谷歌搜索将给你一些坚实的解释。还有第一个拟合,最后拟合,最佳拟合和最差拟合算法等。当然,与其他任何事物一样,每个都有其优点和缺点。
就malloc()/free()
的简单实现而言,K& R C有一个很好的实现。