Tôi đang cố gắng tìm hiểu cách remap các tệp ánh xạ bộ nhớ trên máy Mac (khi tôi muốn mở rộng không gian có sẵn).Có thực sự không có mremap ở Darwin?
Tôi thấy bạn bè trong thế giới Linux có mremap
nhưng tôi không thể tìm thấy chức năng như vậy trong tiêu đề trên máy Mac của mình. /Developer/SDKs/MacOSX10.6.sdk/usr/include/sys/mman.h
có sau đây:
mmap
mprotect
msync
munlock
munmap
- nhưng không
mremap
man mremap
xác nhận nỗi sợ của tôi.
Tôi hiện đang phải munmap
và mmmap
nếu tôi muốn thay đổi kích thước của tệp ánh xạ, liên quan đến việc vô hiệu hóa tất cả các trang được tải. Phải có cách tốt hơn. Chắc chắn?
Tôi đang cố viết mã sẽ hoạt động trên Mac OS X và Linux. Tôi có thể giải quyết cho một vĩ mô để sử dụng chức năng tốt nhất trong mỗi trường hợp nếu tôi có nhưng tôi muốn làm điều đó đúng cách.
Vì vậy, bạn đang đề xuất tôi nên phân bổ cho kích thước lớn nhất có thể mà tôi từng muốn và lấp đầy lỗ? Đó là một ý tưởng thú vị nhưng tôi lập bản đồ phạm vi địa chỉ tối đa có thể và không để lại thêm địa chỉ cho bất kỳ điều gì khác hoặc tôi sử dụng số tiền nhỏ hơn và có nguy cơ bị hết. Ngoài ra, điều này sẽ không được nền tảng (như được chỉ ra trong câu hỏi của tôi) như tôi không thể đảm bảo một số hệ thống tập tin sẽ không thực sự không phạm vi toàn bộ của tập tin và chất thải gigabyte. – Joe
Bạn thậm chí không cần phải làm cho các tập tin trên đĩa lớn. Chỉ cần 'mmap' lớn hơn kích thước tệp. Việc truy cập vào cuối tập tin sẽ dẫn đến 'SIGBUS', vì vậy bạn cần' ftruncate' lâu hơn trước khi thử truy cập các phần mới thông qua 'mmap', nhưng nếu không thì nó sẽ ổn. –