mmap
sangat 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. mmap
memungkinkan semua proses untuk berbagi halaman memori fisik yang sama, menghemat banyak memori.
mmap
juga memungkinkan sistem operasi untuk mengoptimalkan operasi paging. Misalnya, pertimbangkan dua program; program A
yang membaca 1MB
file menjadi buffer malloc
, dan program B yang mmaps
file 1MB menjadi memori. Jika sistem operasi harus menukar sebagian A
memori keluar, ia harus menulis konten buffer untuk menukar sebelum dapat menggunakan kembali memori. Dalam B
hal apapun mmap
halaman 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 mmap
halaman yang dapat ditulis sebagai hanya baca dan menangkap kesalahan seg , mirip dengan strategi Copy on Write ).
mmap
juga berguna untuk komunikasi antar proses . Anda bisa mmap
file sebagai baca / tulis dalam proses yang perlu berkomunikasi dan kemudian menggunakan primitif sinkronisasi di mmap'd
wilayah (ini adalah apa MAP_HASSEMAPHORE
bendera untuk).
Satu tempat yang mmap
bisa menjadi canggung adalah jika Anda perlu bekerja dengan file yang sangat besar pada mesin 32 bit. Ini karena mmap
harus 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 mmap
sebagai pengganti baca / tulis adalah bahwa Anda harus memulai pemetaan Anda pada offset ukuran halaman. Jika Anda hanya ingin mendapatkan beberapa data pada offset, X
Anda harus memperbaiki offset itu sehingga kompatibel dengannya mmap
.
Dan akhirnya, baca / tulis adalah satu-satunya cara Anda dapat bekerja dengan beberapa jenis file. mmap
tidak dapat digunakan pada hal-hal seperti pipa dan ttys .