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 .