编写一个函数分配动态内存,如malloc

时间:2012-06-06 08:18:08

标签: c linux memory-management malloc

如何在Linux平台上实现malloc

2 个答案:

答案 0 :(得分:6)

在Linux中,malloc基于两个功能:

  1. brk - 更改堆的大小。一旦增加了大小,就由你来管理堆。 注意:如果您管理堆,则正常的malloc不能执行此操作。因此,这种方式需要停用所有对malloc的调用(包括隐式调用,例如strdup)。

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

答案 1 :(得分:3)

sbrk()功能可能就是你要找的东西。它会根据您指定的字节数增加堆的大小。

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

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