mmap
thậ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. mmap
cho 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ớ.
mmap
cũ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 1MB
tệp vào bộ đệm tạo malloc
và chương trình B mmaps
tệp 1MB vào bộ nhớ. Nếu hệ điều hành phải hoán đổi một phần A
bộ 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 B
trường hợp, bất kỳ trang nào chưa được sửa đổi mmap
có 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 mmap
từ đó. (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 mmap
là chỉ đọc và bắt lỗi seg , tương tự như chiến lược Copy on Write ).
mmap
cũng hữu ích cho giao tiếp quá trình . Bạn có thể mmap
mộ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'd
khu vực (đây là những gì MAP_HASSEMAPHORE
cờ được dùng cho).
Một nơi mmap
có 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 mmap
phả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 mmap
việ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ù, X
bạ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. mmap
không thể được sử dụng trên những thứ như ống và ttys .