歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux下內存映射文件的用法簡介

由於項目需要,所以學習了一下Linux下內存映射文件的用法,在這裡共享一下自己的收獲,希望大家提出寶貴意見,進行交流。

簡介:

內存映射文件與虛擬內存有些類似,通過內存映射文件可以保留一個地址空間的區域,同時將物理存儲器提交給此區域,只是內存文件映射的物理存儲器來自一個已經存在於磁盤上的文件,而非系統的頁文件,而且在對該文件進行操作之前必須首先對文件進行映射,就如同將整個文件從磁盤加載到內存。由此可以看出,使用內存映射文件處理存儲於磁盤上的文件時,將不必再對文件執行I/O操作,這意味著在對文件進行處理時將不必再為文件申請並分配緩存,所有的文件緩存操作均由系統直接管理,由於取消了將文件數據加載到內存、數據從內存到文件的回寫以及釋放內存塊等步驟,使得內存映射文件在處理大數據量的文件時能起到相當重要的作用。另外,實際工程中的系統往往需要在多個進程之間共享數據,如果數據量小,處理方法是靈活多變的,如果共享數據容量巨大,那麼就需要借助於內存映射文件來進行。實際上,內存映射文件正是解決本地多個進程間數據共享的最有效方法。

在網上找了一些代碼,自己加工之後在Linux下編譯通過,可以運行實現相應功能。

memmap.h

  1. #ifndef MEMMAP_H   
  2. #define MEMMAP_H   
  3. #include <stdio.h>   
  4.   
  5. class MemMap  
  6. {  
  7. public:  
  8.     MemMap();  
  9.     ~MemMap();  
  10.   
  11.     bool Map(const char* szFileName);  
  12.     void UnMap();  
  13.   
  14.     const    void* GetData() const { return m_pData; }  
  15.     size_t         GetSize() const { return m_uSize; }  
  16.   
  17. private:  
  18.     void*     m_pData;  
  19.     size_t    m_uSize;  
  20.     int       m_nFile;  
  21. };  
  22. #endif  
Copyright © Linux教程網 All Rights Reserved