Каковы недостатки выделения памяти с помощью mmap
(с MAP_PRIVATE и MAP_ANONYMOUS), чем с помощью malloc
? Для данных в области видимости функции я бы в любом случае использовал стековую память и, следовательно, не malloc.
Один недостаток, который приходит на ум, касается динамических структур данных, таких как деревья и связанные списки, где часто требуется выделять и удалять небольшие фрагменты данных. Использование mmap
там было бы дорого по двум причинам, одна из которых - выделение с гранулярностью 4096 байт, а другая - необходимость выполнения системного вызова.
Но в других сценариях, как вы думаете, malloc
лучше, чем mmap
? Во-вторых, не переоцениваю ли я недостатки mmap
для динамических структур данных?
Одно преимущество mmap
над malloc
, о котором я могу думать, это то, что память немедленно возвращается в ОС, когда вы делаете munmap
, тогда как при malloc/free
, я думаю, память до точки разрыва сегмента данных никогда не возвращается, но сохраняется для повторного использования.
Да, malloc
лучше, чем mmap
. Это гораздо проще в использовании, гораздо более мелкозернистый и гораздо более портативный. В конце концов, он все равно позвонит mmap
.
Если вы начнете выполнять повседневное управление памятью с помощью mmap
, вам захочется реализовать какой-то способ разделения его на более мелкие куски, чем страницы, и вы в конечном итоге переопределите malloc
- возможно, неоптимальным образом.