mmap 速度快 整塊操作

2022-07-01 14:57:17 字數 881 閱讀 9468

mmap使得可以將裝置記憶體對映到使用者空間,從而使得使用者程式獲得訪問硬體的能力,mmap的動作需要由核心中的驅動來實現。在使用mmap對映後,使用者程式對給定範圍的記憶體的讀寫就變成了對裝置記憶體的讀寫,也就是在訪問裝置了。

並不是所有的硬體都支援mmap,比如串列埠裝置就不支援mmap。mmap存在乙個限制,就是它對映的粒度為page_size,因而核心只能在頁表一級對虛擬記憶體位址進行管理,因而使用mmap將裝置記憶體對映到使用者程序的虛擬記憶體空間時必須以頁為單位,並且核心被對映的實體地址也必須起始於page_size的整數倍,即被對映的實體地址的起始位址必須對齊到page_size上。

原文: 

但 mmap方式只適用於更新、讀寫一塊固定大小的檔案區域而不能做像諸如不斷的寫內容進入檔案導到檔案增長這類的事。

在一般的檔案讀寫中,會有兩次資料拷貝,一次是從硬碟拷貝到作業系統核心,另一次是從作業系統核心拷貝到使用者態的應用程式。而在記憶體對映檔案中,一般情況下,只有一次拷貝,且記憶體分配在作業系統核心,應用程式訪問的就是作業系統的核心記憶體空間,這顯然要比普通的讀寫效率更高。

記憶體對映檔案的另乙個重要特點是,它可以被多個不同的應用程式共享,多個程式可以對映同乙個檔案,對映到同一塊記憶體區域,乙個程式對記憶體的修改,可以讓其他程式也看到,這使得它特別適合用於不同應用程式之間的通訊。比普通的基於loopback介面的socket要快10倍。

簡單總結下,對於一般的檔案讀寫不需要使用記憶體對映檔案,但如果處理的是大檔案,要求極高的讀寫效率,比如資料庫系統或繁忙的電子交易系統,或者需要在不同程式間進行共享和通訊,那就可以考慮記憶體對映檔案。

哪個訪問速度快!

看如下 訪問c,和p的資料,哪乙個更快,還是一樣?void main 這還有區別?有也,我也是看了別人的分析,才明白。c為陣列,指向棧記憶體,p為指標,指向堆記憶體 賦值方式不同 11 char c 1234567890 彙編 如下 0040d6c9 mov eax,string 123456789...

exp速度快命令優化

conventional path export和direct path export 從oracle7的release7.3開始,oracle開始在exp工具中提供兩種方法匯出表的資料 direct path匯出和conventional path匯出。通過exp的引數direct來判斷選用那種匯...

Redis 為什麼速度快

1 完全基於記憶體,絕大部分請求是純粹的記憶體操作,非常快速。資料存在記憶體中,類似於hashmap,hashmap的優勢就是查詢和操作的時間複雜度都是o 1 2 資料結構簡單,對資料操作也簡單,redis中的資料結構是專門進行設計的 3 採用單執行緒,避免了不必要的上下文切換和競爭條件,也不存在多...