mmap
чудово, якщо у вас є декілька процесів, які отримують доступ до даних лише з читання з одного файлу, що є загальним для того типу серверних систем, які я пишу. mmap
дозволяє всім цим процесам обмінюватися одними і тими ж сторінками фізичної пам'яті, економлячи багато пам'яті.
mmap
також дозволяє операційній системі оптимізувати операції пейджингу. Наприклад, розгляньте дві програми; програма, A
яка зчитує 1MB
файл у буфер, що створює malloc
, і програма B, що mmaps
має 1MB файл в пам'ять. Якщо операційній системі доведеться замінити частину A
пам'яті, вона повинна записати вміст буфера для обміну, перш ніж вона зможе повторно використовувати пам'ять. У B
такому випадку будь-які незмінені mmap
'd-сторінки можуть бути використані негайно, оскільки ОС знає, як відновити їх із наявного файлу, з якого вони були mmap
. (Операційна система може виявити, які сторінки немодифіковані, спочатку позначивши записувані mmap
'd сторінки як лише для читання та виявивши помилки Seg , подібно до стратегії Copy on Write ).
mmap
також корисний для міжпроцесорного спілкування . Ви можете mmap
подати файл як читання / запис у процесах, які потребують зв'язку, а потім використовувати примітиви синхронізації в mmap'd
регіоні (для цього MAP_HASSEMAPHORE
прапор призначений).
Одне місце mmap
може бути незручним, якщо вам потрібно працювати з дуже великими файлами на 32-бітній машині. Це пояснюється тим, mmap
що потрібно знайти суміжний блок адрес у адресному просторі вашого процесу, який є достатньо великим, щоб вмістити весь діапазон файлу, який відображається. Це може стати проблемою, якщо ваш адресний простір стане фрагментованим, де у вас може бути 2 ГБ адресного простору, але жоден його окремий діапазон не може відповідати відображенню файлів на 1 ГБ. У цьому випадку вам, можливо, доведеться картографувати файл меншими шматками, ніж ви хотіли б, щоб він змістився.
Інша потенційна незграбність mmap
, яка заміняє читання / запис, полягає в тому, що вам потрібно почати своє відображення на зміщеннях розміру сторінки. Якщо ви просто хочете отримати деякі дані при компенсації, X
вам потрібно буде виправити це зміщення, щоб воно було сумісним mmap
.
І , нарешті, читання / запис є єдиним способом ви можете працювати з деякими типами файлів. mmap
не може бути використаний для таких речей, як труби та ttys .