2015-08-08 103 views
3

從境界的限制:https://realm.io/docs/objc/latest/#current-limitations領域的iOS RAM限制

「任何單一領域的文件不能超過你的應用程序將被允許在iOS中映射的內存量較大的 - 每個設備這個變化,以及取決於如何分割了內存空間就在那個時間點(這裏有一個關於這個問題的雷達:rdar:// 17119975)如果你需要存儲更多的數據,你可以將它映射到多個Realm文件中。

這是否意味着單個Realm文件總是存儲在RAM中? 或者這是否意味着地址空間應該足夠大? 這種說法很混亂......

+0

我認爲這意味着如果你的領域文件大於總RAM,那麼它不能加載。雖然這是一個相當苛刻的限制... – EpicPandaForce

+0

你會想錯。 – gnasher729

回答

4

因爲Realm在底層使用mmap,所以它當前依賴於程序address space將一個連續的未聲明地址塊大於Realm文件的大小。這與實際的可用內存量不同,因爲內存可能來自地址空間的許多不同部分,留下大量未使用的內存,但沒有足夠大的地址空間塊來存儲Realm文件。

1

這是在談論內存映射,即使用文件作爲後備存儲的虛擬內存。理論上,操作系統可以以這種方式訪問​​無限量的數據,完全獨立於您擁有的RAM數量。這些文件絕對不會保存在RAM中。他們佔用地址空間,所以你將被限制在一個32位的應用程序,但他們不佔用RAM。

實際上,我試圖映射一個1GB的文件,並沒有問題的工作。

+0

謝謝您的意見。實際上,我對這個陳述感到困惑:「取決於當時存儲空間的分散程度」。當前內存碎片如何影響文件2內存映射? – AlexeyVMP