1

如何malloc在 Linux 平台上实现?

4

2 回答 2

6

在 Linux 中,malloc基于两个函数:

  1. brk- 改变堆的大小。一旦你增加了大小,就由你来管理堆。注意:如果你管理堆,正常的malloc一定不能这样做。所以这种方式需要禁用所有调用malloc(包括隐式调用,如strdup)。

  2. mmap- 从内核分配一个或多个页面(也可用于文件 I/O)。当您有内存页面时,您可以以某种方式管理它们并将较小的部分返回给调用者。您可以并行执行此操作malloc- 它将管理它获得的页面,您将管理您获得的页面。

于 2012-06-06T08:35:36.963 回答
3

sbrk()功能可能是您正在寻找的。它通过您指定的字节数增加堆的大小。

一旦你获得了这块新的内存,你就可以选择如何管理分配的和空闲的字节。我个人认为二进制伙伴系统是一个很好的算法开始 - 谷歌搜索会给你一些可靠的解释。还有第一次拟合、最后一次拟合、最佳拟合和最差拟合算法等。当然,与其他任何事情一样,每个人都有其优点和缺点。

就 go 的简单实现malloc()/free()而言,K&R C 有一个很好的实现。

于 2012-06-06T16:29:51.877 回答