2014-12-04 70 views
1

是否可以在不使用brk的情况下实现malloc库函数?我可以使用sbrk(0)找出程序暂停的当前位置,然后使用sbrk(size)来增加它吗?我们是否可以在不使用brk()系统调用的情况下实现Malloc功能

如果是,那么为什么brk增加了第一位?

+0

既然你提到'brk'和'sbrk'我假设你在UNIX(或者类UNIX)系统上?然后你可以使用匿名[“文件”映射](http://man7.org/linux/man-pages/man2/mmap.2.html)来完成类似的事情。 – 2014-12-04 10:35:49

+2

同样,'malloc(n)'可以通过'realloc(0,n)'来实现。这并不意味着'malloc()'是无用的。 – 2014-12-04 10:37:34

回答

4

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

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

POSIX标准还警告我们:

BRK的行为()和SBRK()是未指定的,如果一个应用程序还使用任何其他 存储器的功能(例如malloc(),MMAP() , 自由())。其他函数可以静静地使用这些其他的内存函数。

相关问题