我们可以在不使用brk()系统调用的情况下实现Malloc功能

时间:2014-12-04 10:31:08

标签: c malloc

是否可以在不使用malloc的情况下实施brk库函数?我可以使用sbrk(0)找出程序中断的当前位置,然后使用sbrk(size)来递增它吗?

如果是,那么为什么首先添加brk

1 个答案:

答案 0 :(得分:4)

在大多数当前的Unix中,不鼓励使用brksbrk。相反,malloc通常匿名调用mmap(没有文件支持),并返回页面的地址。

brksbrk假设一个连续的地址空间,不再是这种情况。如今,一个进程可能在不同的范围内有许多映射,其间存在未映射的间隙。

POSIX标准还警告我们:

  

如果应用程序还使用任何其他应用程序,则未指定brk()和sbrk()的行为   记忆功能(如malloc(),mmap(),free())。其他功能可以静默使用这些其他记忆功能。