2012-02-07 38 views
5

Tôi có một ứng dụng có khả năng có thể có hàng trăm bộ nhớ được ánh xạ, tức là, mmap(), các tệp được mở tại bất kỳ thời điểm nào.Có giới hạn thực tế về số lượng tệp ánh xạ bộ nhớ trong iOS không?

Tôi đang tìm kiếm một số trợ giúp để hiểu được điều gì, nếu có, giới hạn thực tế là về số lượng tệp ánh xạ bộ nhớ đã mở.

tôi tạo ra những file mmap như:

void* map = mmap(0, *capacity, PROT_READ | PROT_WRITE, MAP_SHARED, file, 0); 
+0

Bạn đã thử tạo chúng cho đến khi ứng dụng gặp sự cố chưa? Thông báo lỗi bạn nhận được sẽ cho bạn biết giới hạn nào bạn đã đạt trước tiên. – Douglas

Trả lời

5

iOS hạt nhân phân bổ khoảng 700mb bộ nhớ ảo cho mỗi quá trình. Vì vậy, đó sẽ là giới hạn của bạn.

Giới hạn bạn có trên RAM sẽ khác với dữ liệu trang hạt nhân vào RAM từ bộ nhớ ảo khi bạn chạm vào dữ liệu được ánh xạ. Khi RAM tự lấp đầy, khoảng 40mb trên iphone 4, tùy thuộc vào lượng RAM được các ứng dụng khác kết nối, và bạn yêu cầu nhiều dữ liệu được ánh xạ hơn, hạt nhân sẽ cần dữ liệu trang trong RAM và thay thế bằng dữ liệu được yêu cầu bởi phân trang nó thành RAM.

Một điều cần nhớ là nếu bạn sử dụng PROT_READ | PROT_WRITE thì bạn đang cho phép ghi dữ liệu vào tệp được ánh xạ. Điều này sau đó sẽ tác động đến 700mb không gian được cấp phát nếu bạn quyết định ghi dữ liệu vào tệp được ánh xạ.

Vì vậy, giới hạn là 700MB cho bộ nhớ ảo, cho dù bạn ánh xạ một tệp 500MB và sau đó ghi 200MB dữ liệu khác vào bộ nhớ đó hoặc nếu bạn có, ví dụ: 10 X 70mb ánh xạ tệp mà bạn vừa đọc.

Một điều cuối cùng là bạn có thể phát hành tệp đã mở là nguồn dữ liệu được ánh xạ ngay sau khi bạn nhận được tệp ánh xạ thành công bằng cách sử dụng mmap().

Hy vọng điều này sẽ hữu ích.

Thông tin thêm:

  • Về bộ nhớ ảo 700mb của iphone và xung quanh 40MB RAM, điều này xuất phát từ làm hồ sơ sử dụng công cụ.

  • Về hoạt động thực tế của quản lý bộ nhớ hệ thống. Đọc trên virtual memory Về cách tính năng này hoạt động trên iOS. Đọc tài liệu về táo trên virtual memory tập trung vào OS X nhưng đề cập đến sự khác biệt trên iOS

+0

Cảm ơn bạn đã trả lời! Thông tin này có được xác định ở đâu đó trên trang web của Apple để tôi có thể đọc chi tiết hơn không? –

+0

@TReddy - Tôi đã cập nhật câu trả lời của mình. Nếu bạn quan tâm đến cách hạt nhân thực sự xử lý bộ nhớ ở mức thấp hơn, hãy thêm nhận xét và tôi có thể thêm các nguồn khác. : D – jarryd

+0

Cảm ơn các liên kết ... rất thông tin ... –

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