2014-12-04 65 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() , 自由())。其他函數可以靜靜地使用這些其他的內存函數。

相關問題