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