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