mmapsangat bagus jika Anda memiliki beberapa proses mengakses data dengan cara hanya baca dari file yang sama, yang umum dalam jenis sistem server yang saya tulis. mmapmemungkinkan semua proses untuk berbagi halaman memori fisik yang sama, menghemat banyak memori.
mmapjuga memungkinkan sistem operasi untuk mengoptimalkan operasi paging. Misalnya, pertimbangkan dua program; program Ayang membaca 1MBfile menjadi buffer malloc, dan program B yang mmapsfile 1MB menjadi memori. Jika sistem operasi harus menukar sebagian Amemori keluar, ia harus menulis konten buffer untuk menukar sebelum dapat menggunakan kembali memori. Dalam Bhal apapun mmaphalaman yang tidak dimodifikasi dapat digunakan kembali dengan segera karena OS tahu cara mengembalikannya dari file yang sudah ada mmap. (OS dapat mendeteksi halaman mana yang tidak dimodifikasi dengan awalnya menandai mmaphalaman yang dapat ditulis sebagai hanya baca dan menangkap kesalahan seg , mirip dengan strategi Copy on Write ).
mmapjuga berguna untuk komunikasi antar proses . Anda bisa mmapfile sebagai baca / tulis dalam proses yang perlu berkomunikasi dan kemudian menggunakan primitif sinkronisasi di mmap'dwilayah (ini adalah apa MAP_HASSEMAPHOREbendera untuk).
Satu tempat yang mmapbisa menjadi canggung adalah jika Anda perlu bekerja dengan file yang sangat besar pada mesin 32 bit. Ini karena mmapharus menemukan blok alamat yang berdekatan di ruang alamat proses Anda yang cukup besar untuk memenuhi seluruh rentang file yang dipetakan. Ini bisa menjadi masalah jika ruang alamat Anda menjadi terfragmentasi, di mana Anda mungkin memiliki ruang alamat 2 GB gratis, tetapi tidak ada rentang individu yang dapat memuat pemetaan file 1 GB. Dalam hal ini Anda mungkin harus memetakan file dalam potongan yang lebih kecil daripada yang Anda inginkan agar sesuai.
Kecanggihan potensial lain dengan mmapsebagai pengganti baca / tulis adalah bahwa Anda harus memulai pemetaan Anda pada offset ukuran halaman. Jika Anda hanya ingin mendapatkan beberapa data pada offset, XAnda harus memperbaiki offset itu sehingga kompatibel dengannya mmap.
Dan akhirnya, baca / tulis adalah satu-satunya cara Anda dapat bekerja dengan beberapa jenis file. mmaptidak dapat digunakan pada hal-hal seperti pipa dan ttys .