是否可以在不使用brk
的情况下实现malloc
库函数?我可以使用sbrk(0)
找出程序中断的当前位置,然后使用sbrk(size)
递增它吗?
如果是,那么为什么首先添加brk
?
在
大多数当前的 Unix 中不鼓励使用 brk
和 sbrk
。相反,malloc
通常匿名调用mmap
(没有文件支持(,并返回页面的地址。
brk
和sbrk
假定一个连续的地址空间,现在情况已不再如此。如今,一个流程可能在不同范围内有许多映射,中间有未映射的间隙。
POSIX标准还警告我们:
如果应用程序还使用任何其他 内存函数(如malloc((,mmap((,free(((。其他函数可能会以静默方式使用这些其他内存函数。