如何malloc
在 Linux 平台上实现?
问问题
438 次
2 回答
6
在 Linux 中,malloc
基于两个函数:
brk
- 改变堆的大小。一旦你增加了大小,就由你来管理堆。注意:如果你管理堆,正常的malloc
一定不能这样做。所以这种方式需要禁用所有调用malloc
(包括隐式调用,如strdup
)。mmap
- 从内核分配一个或多个页面(也可用于文件 I/O)。当您有内存页面时,您可以以某种方式管理它们并将较小的部分返回给调用者。您可以并行执行此操作malloc
- 它将管理它获得的页面,您将管理您获得的页面。
于 2012-06-06T08:35:36.963 回答
3
该sbrk()
功能可能是您正在寻找的。它通过您指定的字节数增加堆的大小。
一旦你获得了这块新的内存,你就可以选择如何管理分配的和空闲的字节。我个人认为二进制伙伴系统是一个很好的算法开始 - 谷歌搜索会给你一些可靠的解释。还有第一次拟合、最后一次拟合、最佳拟合和最差拟合算法等。当然,与其他任何事情一样,每个人都有其优点和缺点。
就 go 的简单实现malloc()/free()
而言,K&R C 有一个很好的实现。
于 2012-06-06T16:29:51.877 回答