1
是否可以在不使用brk
的情况下实现malloc
库函数?我可以使用sbrk(0)
找出程序暂停的当前位置,然后使用sbrk(size)
来增加它吗?我们是否可以在不使用brk()系统调用的情况下实现Malloc功能
如果是,那么为什么brk
增加了第一位?
是否可以在不使用brk
的情况下实现malloc
库函数?我可以使用sbrk(0)
找出程序暂停的当前位置,然后使用sbrk(size)
来增加它吗?我们是否可以在不使用brk()系统调用的情况下实现Malloc功能
如果是,那么为什么brk
增加了第一位?
在大多数当前的Unix中,不鼓励使用brk
和sbrk
。相反,malloc
通常以匿名方式呼叫mmap
(无文件支持),并返回页面的地址。
brk
和sbrk
假设一个连续的地址空间,不再是这种情况。如今,一个进程可能会在不同范围内有很多映射,其间有未映射的间隙。
POSIX标准还警告我们:
BRK的行为()和SBRK()是未指定的,如果一个应用程序还使用任何其他 存储器的功能(例如malloc(),MMAP() , 自由())。其他函数可以静静地使用这些其他的内存函数。
既然你提到'brk'和'sbrk'我假设你在UNIX(或者类UNIX)系统上?然后你可以使用匿名[“文件”映射](http://man7.org/linux/man-pages/man2/mmap.2.html)来完成类似的事情。 – 2014-12-04 10:35:49
同样,'malloc(n)'可以通过'realloc(0,n)'来实现。这并不意味着'malloc()'是无用的。 – 2014-12-04 10:37:34