Подтвердить что ты не робот

Когда вы будете использовать mmap

Итак, я понимаю, что если вам нужна некоторая динамически распределенная память, вы можете использовать malloc(). Например, ваша программа читает файл переменной длины в char []. Вы не знаете заранее, как большой размер вашего массива, поэтому вы выделяете память во время выполнения.

Я пытаюсь понять, когда вы будете использовать mmap(). Я прочитал справочную страницу и, честно говоря, я не понимаю, что это за вариант.

Может кто-нибудь объяснить мне случай использования в простых терминах? Спасибо заранее.

4b9b3361

Ответ 1

mmap можно использовать для нескольких вещей. Во-первых, сопоставление файлов. Вместо того, чтобы выделять память с помощью malloc и считывать файл, вы отображаете весь файл в память, не просматривая его явно. Теперь, когда вы читаете (или записываете) эту область памяти, операции действуют на файл прозрачно. Зачем вам это делать? Это позволяет вам легко обрабатывать файлы, которые больше, чем доступная память, используя механизм подкачки, предоставляемый ОС. Даже для небольших файлов mmapping уменьшает количество копий памяти.

mmap также может использоваться для анонимного сопоставления. Это сопоставление не поддерживается файлом и в основном является запросом на кусок памяти. Если это похоже на malloc, вы правы. Фактически, большинство реализаций malloc будут использовать анонимный mmap для обеспечения большой области памяти.

Другим распространенным вариантом использования является то, что несколько процессов сопоставляют один и тот же файл с общим сопоставлением для получения области разделяемой памяти. Файл не должен быть фактически записан на диск. shm_open - это удобный способ сделать это.

Ответ 2

Всякий раз, когда вам нужно читать/записывать блоки данных фиксированного размера, гораздо проще (и быстрее) просто сопоставлять файл данных на диске в память с помощью mmap и использовать его напрямую, а не выделять память, читать файл, получать доступ данные, потенциально записать данные обратно на диск и освободить память.