歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下內存映射文件的用法簡介

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

日期:2017/3/1 10:26:21   编辑:Linux編程

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

簡介:

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

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

memmap.h

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