將檔案對映到記憶體

2022-02-23 16:44:25 字數 730 閱讀 9761

mmap的好處:

和read、write系統呼叫相比不會產生無關的副本;

如果不出錯就不會有系統呼叫、操作環境切換等開銷;

不再需要lseek呼叫。

mmap的壞處:

記憶體對映總是pagesize的整數倍,會浪費一定的記憶體;

如果要對映的內容非常大的時候可能找不到連續的線性位址空間;

建立並維護核心相關資料結構,這部分可能抵消雙重副本節省下的開銷,尤其是大型頻繁訪問的檔案。

下面是乙個檔案對映比較全面的例子:

int main()else

//調整對映的大小,mremap_maymove說明是可移動的

p = (char*)mremap(p, 10, 20, mremap_maymove);

if(p == map_failed)else

//修改記憶體訪問許可權

i = mprotect(p, 20, prot_read);

if(p == map_failed)else

//*p='b';這是會引起段錯誤

//給核心提建議(預讀)

i = madvise(p, 20, madv_willneed);

if(i == -1)else

//解除對映

i = munmap(p, 10);

if(i == -1)else

}close(fd);

return

0;}

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

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

將實體對映到多個表

table secondtable name catalog schema pkjoincolumns 指定新資料表中的乙個或多個外來鍵,只有通過該外來鍵才可讓新資料表中的記錄參照到主表記錄,屬性 primarykeyjoincolumn uniqueconstraints 為新資料表指定唯一約束 ...

將MySQL資料對映到Memcached

本文介紹利用mysql udfs for memcached與mysql觸發程式結合實現將mysql的資料對映到memcached的一種方法,能實現當mysql資料更新時,實時更新memcache資料的效果,從而減少開發相應程式來維護memcached資料。mysql udfs for memcac...