Что если я буду выделять память с помощью mmap вместо malloc?

Каковы недостатки выделения памяти с помощью mmap (с MAP_PRIVATE и MAP_ANONYMOUS), чем с помощью malloc? Для данных в области видимости функции я бы в любом случае использовал стековую память и, следовательно, не malloc.

Один недостаток, который приходит на ум, касается динамических структур данных, таких как деревья и связанные списки, где часто требуется выделять и удалять небольшие фрагменты данных. Использование mmap там было бы дорого по двум причинам, одна из которых - выделение с гранулярностью 4096 байт, а другая - необходимость выполнения системного вызова.

Но в других сценариях, как вы думаете, malloc лучше, чем mmap? Во-вторых, не переоцениваю ли я недостатки mmap для динамических структур данных?

Одно преимущество mmap над malloc, о котором я могу думать, это то, что память немедленно возвращается в ОС, когда вы делаете munmap, тогда как при malloc/free, я думаю, память до точки разрыва сегмента данных никогда не возвращается, но сохраняется для повторного использования.

21
задан Fred Foo 15 January 2012 в 13:38
поделиться

1 ответ

Да, malloc лучше, чем mmap. Это гораздо проще в использовании, гораздо более мелкозернистый и гораздо более портативный. В конце концов, он все равно позвонит mmap.

Если вы начнете выполнять повседневное управление памятью с помощью mmap, вам захочется реализовать какой-то способ разделения его на более мелкие куски, чем страницы, и вы в конечном итоге переопределите malloc - возможно, неоптимальным образом.

28
ответ дан 29 November 2019 в 20:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: