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

编写一个函数,像malloc一样动态分配内存,c,linux,memory-management,malloc,C,Linux,Memory Management,Malloc,如何在Linux平台上实现malloc?在Linux中,malloc基于两个功能: brk-更改堆的大小。一旦您增加了堆的大小,就由您来管理堆了。注意:如果管理堆,则普通malloc不能这样做。因此,这种方法需要禁用对malloc的所有调用,包括隐式调用,如strdup mmap-从内核分配一个或多个页面也可用于文件I/O。当您有内存页面时,您可以以某种方式管理它们,并将较小的页面返回给调用者。您可以与malloc并行执行此操作-它将管理它获得的页面,您将管理您获得的页面 在Linux中,mal

如何在Linux平台上实现malloc?

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

brk-更改堆的大小。一旦您增加了堆的大小,就由您来管理堆了。注意:如果管理堆,则普通malloc不能这样做。因此,这种方法需要禁用对malloc的所有调用,包括隐式调用,如strdup

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

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

brk-更改堆的大小。一旦您增加了堆的大小,就由您来管理堆了。注意:如果管理堆,则普通malloc不能这样做。因此,这种方法需要禁用对malloc的所有调用,包括隐式调用,如strdup

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

sbrk函数可能就是您要寻找的。它会按指定的字节数增加堆的大小

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

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

sbrk函数可能就是您想要的。它会按指定的字节数增加堆的大小

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


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

下次,请将其标记为家庭作业。C编程语言第二版,第8.7节。google for C内存池,我认为这是他想要的。下次,请将其标记为家庭作业。C编程语言第二版,第8.7节。google for C内存池,我想这就是他想要的。