Какой из этих вызовов в среднем быстрее? Я слышал, что mmap
быстрее для небольших распределений, но я не слышал сравнения ни того, ни другого. Любая информация о производительности для них была бы хорошей.
mmap против sbrk, сравнение производительности
Ответы (1)
Вы должны пометить это конкретной реализацией (например, linux
), поскольку ответ, безусловно, зависит от реализации. Сейчас я предполагаю Linux, так как он самый популярный.
С учетом сказанного, brk
теоретически более оптимизирован, и на практике он работает примерно на 10% быстрее на моей машине. Выделяя одну страницу, я получаю:
brk
: мин. 2550 циклов, тип. 2650 цикловmmap
: минимум 2700 циклов, обычно 2800 циклов
Я помню, что слышал что-то вроде того, что brk
может пропустить блокировку семафора mmap
, что объясняет несоответствие.
Примечание. Я обновил это время после настройки своего теста, чтобы сделать фиктивные вызовы до определения времени, чтобы гарантировать, что весь код будет в кеше.
person
R.. GitHub STOP HELPING ICE
schedule
01.04.2011
как ни странно для меня, mmap на самом деле работал быстрее, чем sbrk, но опять же, с sbrk можно сохранить непрерывную память.
- person Jesus Ramos; 04.04.2011
Возможно,
sbrk
вашей системы выполняет некоторую блокировку пользовательского пространства или учет, или даже дважды вызывает системный вызов brk
. (один раз, чтобы получить старый brk
, и еще раз, чтобы установить новый...?) Если вы реализуете malloc
, я бы не стал полагаться на системную библиотеку sbrk
, а сделал системный вызов brk
самостоятельно.
- person R.. GitHub STOP HELPING ICE; 04.04.2011
В итоге я использовал mmap в качестве основного способа захвата памяти из системы и использовал sbrk в качестве резервной копии на случай, если я получу MAP_FAILED. Вместо этого я мог бы попробовать использовать вызов brk, чтобы посмотреть, какова будет производительность.
- person Jesus Ramos; 04.04.2011
sbrk
(или, что еще хуже,brk
) в программе, которая может вызыватьmalloc
. И поскольку любая стандартная библиотечная функция может вызыватьmalloc
, это означает, что вы не можете использовать стандартную библиотеку, и точка. - person R.. GitHub STOP HELPING ICE   schedule 01.04.2011