iOS將大檔案對映到記憶體 讀取大檔案

2021-06-26 22:46:51 字數 506 閱讀 7009

from: 

2023年10月23日

在《中國區gps偏移糾正(適用於google地圖)》一文中曾讀取乙個78m的大資料檔案,一開始採用了nsdata的datawithcontentsoffile:方法。不少人反饋說如果直接使用,將會耗盡ios的記憶體。其實這個是可以改善的。 nsdata還有乙個api:

+ (id)datawithcontentsoffile:(nsstring *)path options:(nsdatareadingoptions)readoptionsmask error:(nserror **)errorptr;
不帶引數時記憶體占用:

由此可見,對於體積很大檔案,使用記憶體對映方式讀取將會減少大量記憶體占用。 什麼是檔案記憶體對映呢

檔案記憶體對映是指把乙個檔案的內容對映到程序的記憶體虛擬位址空間中,這個實際上並沒有為檔案內容分配物理記憶體。實際上就相當於將記憶體位址值指向檔案的磁碟位址。如果對這些記憶體進行讀寫,實際上就是對檔案在磁碟上內容進行讀寫。

將檔案對映到記憶體

mmap的好處 和read write系統呼叫相比不會產生無關的副本 如果不出錯就不會有系統呼叫 操作環境切換等開銷 不再需要lseek呼叫。mmap的壞處 記憶體對映總是pagesize的整數倍,會浪費一定的記憶體 如果要對映的內容非常大的時候可能找不到連續的線性位址空間 建立並維護核心相關資料結...

大檔案處理 記憶體檔案對映

記憶體對映檔案,是由乙個檔案到一塊記憶體的對映。與虛擬記憶體有些類似,通過記憶體對映檔案可以保留乙個位址空間的區域,同時將物理儲存器提交給此區域,記憶體檔案對映的物理儲存器來自乙個已經存在的磁碟上的檔案,而且在對該檔案進行操作之前必須首先對檔案進行對映。另外,記憶體對映檔案是由乙個檔案到程序位址空間...

用C語言讀取大檔案的問題 記憶體對映

windows對檔案的讀寫提供了很豐富的操作手段,如 1.file fp,fstearm c c 2.cfile,cstdiofile mfc 3.createfile,readfile api 在處理一般的檔案 文字 非文字 這些足夠了。然而在處理比較大的檔案如 幾十m,幾百m,甚至上g的檔案,這...