2009-04-07 28 views
23

Điều gì giới hạn kích thước của tệp ánh xạ bộ nhớ? Tôi biết nó không thể lớn hơn đoạn liên tục lớn nhất của không gian địa chỉ chưa được phân bổ, và rằng phải có đủ không gian đĩa trống. Nhưng có những giới hạn nào khác không?Tệp có ánh xạ bộ nhớ lớn có thể lớn đến mức nào?

+0

Nền tảng? Windows hoặc Linux? –

Trả lời

24

Bạn đang quá bảo thủ: Tệp ánh xạ bộ nhớ có thể lớn hơn không gian địa chỉ. xem của tệp ánh xạ bộ nhớ bị giới hạn bởi các ràng buộc bộ nhớ hệ điều hành, nhưng đó chỉ là một phần của tệp bạn đang xem cùng một lúc. (Và tôi đoán về mặt kỹ thuật bạn có thể lập bản đồ nhiều khung nhìn của các phần không liên tục của tệp cùng một lúc, do đó, ngoài giới hạn về độ dài và độ dài của trang, nó chỉ là tổng số byte bạn đang xem mà đặt ra giới hạn. [0-1024] và byte [2 -2 + 1024] với hai quan điểm riêng biệt.)

Trong MS Windows, hãy nhìn vào MapViewOfFile chức năng. Nó có hiệu quả mất một tập tin 64-bit bù đắp và chiều dài 32-bit.

+0

Có, tôi phải nói "xem". Tôi cần phải có quyền truy cập vào toàn bộ tập tin cùng một lúc, mà không cần phải nhập lại mmapp(). – user88185

+0

MapViewOfFile có độ dài 64 bit trên máy 64 bit – springy76

+0

dù sao có thể vượt qua ZERO với kích thước có nghĩa là "lớn như tệp" –

1

Không được có giới hạn nào khác. Không phải là đủ? ;-)

+0

Trên hệ điều hành 64 bit, các giới hạn này có vẻ khá lỏng lẻo ... – user88185

1

Dưới Windows: "Kích thước của một cái nhìn tập tin được giới hạn ở những khối liền kề có sẵn lớn nhất của bộ nhớ ảo ưa thổ lộ này là nhiều nhất là 2 GB trừ bộ nhớ ảo đã thuộc về quá trình này.".

Từ MDSN.

Tôi không chắc chắn về LINUX/OSX/Dù gì khác, nhưng nó cũng có thể liên quan đến không gian địa chỉ.

+1

chỉ để làm rõ, đó là kích thước của một chế độ xem tệp, không phải kích thước của tệp. –

+5

"2 GB trừ bộ nhớ ảo đã được dành riêng cho quá trình" trên máy 32 bit? Nó khác nhau trên một hộp 64 bit? – user88185

0

Với FUSE trên Linux, bạn cũng có thể tạo hệ thống tệp trong bộ nhớ mở rộng tới đĩa theo yêu cầu. Tôi không chắc chắn rằng đủ điều kiện như bộ nhớ ánh xạ, và sự phân biệt được loại mờ.

-3

Wikipedia về đề tài này: http://en.wikipedia.org/wiki/Memory-mapped_file

+0

Tôi không thấy các giới hạn khác được đề cập trong bài viết trên Wikipedia này, điều đó có nghĩa là không có gì cả? – user88185

+1

Trong khi điều này về lý thuyết có thể trả lời câu hỏi, [nó sẽ là thích hợp hơn] (http: //meta.stackoverflow.com/q/8259) để bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. –

9

này đã được kinh nghiệm của tôi khi sử dụng tập tin bộ nhớ ánh xạ dưới Win32:

Nếu bản đồ của bạn toàn bộ tập tin vào một phân đoạn, nó thường tap-out ở xung quanh 750 MB, bởi vì nó không thể tìm thấy một khối bộ nhớ tiếp giáp lớn hơn. Nếu bạn chia nó thành các phân đoạn nhỏ hơn, hãy nói 100MB mỗi phân đoạn, bạn có thể nhận được khoảng 1500MB-1800MB tùy thuộc vào những gì khác đang chạy.

Nếu bạn sử dụng /3g switch, bạn có thể nhận được hơn 2GB tối đa khoảng 2700MB nhưng hiệu suất hệ điều hành bị phạt.

Tôi không chắc chắn về 64-bit, tôi chưa bao giờ thử nó nhưng tôi cho rằng kích thước tệp tối đa sẽ bị giới hạn bởi số lượng bộ nhớ vật lý bạn có.

+0

Trên giới hạn 64 bit là không gian địa chỉ có sẵn, giống như trên 32-bit. Bạn có thể ánh xạ chế độ xem 1 GB trên máy 32 bit chỉ có bộ nhớ vật lý 32 MB. Cũng giống như cách bạn có thể ánh xạ chế độ xem 10 TB trên máy 32 bit chỉ có 0,5 GB bộ nhớ. Chỉ những trang 4kb bạn thực sự truy cập mới được ánh xạ vào bộ nhớ thực. – springy76

+1

@ springy76: bạn không thể ánh xạ chế độ xem 10 TB trên máy 32 bit. Chỉ trên 64 bit. –

+4

@SergeyK. bạn đang chết tiệt, đó cũng là những gì tôi muốn viết - nhưng ngón tay của tôi đã gõ một thứ khác. Nó nên có đọc "Cùng một cách bạn có thể bản đồ một cái nhìn 10TB trên một máy 64-bit mà chỉ có 0,5 GB bộ nhớ" – springy76

Các vấn đề liên quan