mmapthật tuyệt nếu bạn có nhiều quy trình truy cập dữ liệu theo kiểu chỉ đọc từ cùng một tệp, điều này phổ biến trong các loại hệ thống máy chủ tôi viết. mmapcho phép tất cả các quá trình đó chia sẻ cùng một trang bộ nhớ vật lý, tiết kiệm rất nhiều bộ nhớ.
mmapcũng cho phép hệ điều hành tối ưu hóa các hoạt động phân trang. Ví dụ, xem xét hai chương trình; chương trình Ađọc 1MBtệp vào bộ đệm tạo mallocvà chương trình B mmapstệp 1MB vào bộ nhớ. Nếu hệ điều hành phải hoán đổi một phần Abộ nhớ, nó phải ghi nội dung của bộ đệm để trao đổi trước khi có thể sử dụng lại bộ nhớ. Trong Btrường hợp, bất kỳ trang nào chưa được sửa đổi mmapcó thể được sử dụng lại ngay lập tức vì HĐH biết cách khôi phục chúng từ tệp hiện có mà chúng được tạo mmaptừ đó. (HĐH có thể phát hiện các trang nào không được sửa đổi bằng cách đánh dấu ban đầu các trang có thể ghi mmaplà chỉ đọc và bắt lỗi seg , tương tự như chiến lược Copy on Write ).
mmapcũng hữu ích cho giao tiếp quá trình . Bạn có thể mmapmột tệp dưới dạng đọc / ghi trong các quy trình cần giao tiếp và sau đó sử dụng các nguyên hàm đồng bộ hóa trong mmap'dkhu vực (đây là những gì MAP_HASSEMAPHOREcờ được dùng cho).
Một nơi mmapcó thể khó xử là nếu bạn cần làm việc với các tệp rất lớn trên máy 32 bit. Điều này là do mmapphải tìm một khối địa chỉ liền kề trong không gian địa chỉ của quy trình của bạn đủ lớn để phù hợp với toàn bộ phạm vi của tệp được ánh xạ. Điều này có thể trở thành vấn đề nếu không gian địa chỉ của bạn bị phân mảnh, trong đó bạn có thể có 2 GB không gian địa chỉ miễn phí, nhưng không có phạm vi riêng lẻ nào có thể phù hợp với ánh xạ tệp 1 GB. Trong trường hợp này, bạn có thể phải ánh xạ tệp thành các phần nhỏ hơn bạn muốn làm cho nó phù hợp.
Một sự lúng túng tiềm năng khác với mmapviệc thay thế cho việc đọc / ghi là bạn phải bắt đầu lập bản đồ của mình trên các độ lệch của kích thước trang. Nếu bạn chỉ muốn lấy một số dữ liệu ở phần bù, Xbạn sẽ cần sửa phần bù đó để nó tương thích mmap.
Và cuối cùng, đọc / ghi là cách duy nhất bạn có thể làm việc với một số loại tệp. mmapkhông thể được sử dụng trên những thứ như ống và ttys .