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

Linux使用內存映射文件做內存池

因為最近項目中需要實現一個臨時數據高速存儲,所以最近對內存映射文件做了一下了解,寫出來與大家分享一下,因為個人水平有限也許會有這樣那樣的問題也懇請大家指正。

mmap是linux內存映射文件,是將文件映射成為內存地址空間的一種方式,其實,方法很簡單。

  1. memfd = open(MEMFILE, O_RDWR | O_CREAT, S_IWUSR | S_IRUSR);  
  2. memd = mmap(NULL, (sizeof(Type)) * size, PROT_WRITE | PROT_READ,  
  3.                 MAP_SHARED, memfd, 0);  
我們的程序現在擁有了一定的地址空間,代碼中也獲得了一個指向首地址的指針,www.linuxidc.com 那我們該怎麼使用他呢?其實,大家想怎麼用就怎麼用,不過我們還是采用一定的方法將這些地址空間管理起來,定義一下結構體來對內存進行結構化管理:
  1. /** 
  2.  * \struct NodeHeader 
  3.  * \brief 節點頭 
  4.  */  
  5. struct NodeHeader {  
  6.     unsigned int         size;         /**< 內存尺寸 */  
  7.     bool                 isActive;     /**< 是否使用 */  
  8.     unsigned int         refCount;        /**< 引用數量 */  
  9.     NodeHeader           *next;  
  10. };  
  11.   
  12.   
  13. /** 
  14.  * \struct Node 
  15.  * \brief 節點 
  16.  */  
  17. struct Node {  
  18.     NodeHeader header;       /**< 節點頭 */  
  19.     char       *data;         /**< 數據 */  
  20. };  
  21.   
  22.   
  23. /** 
  24.  * \struct NodeList 
  25.  * \brief 節點列表 
  26.  */  
  27. struct NodeList {  
  28.     NodeList           *next;  
  29.     unsigned int       size;         /**< 列表中節點的尺寸 */  
  30.     NodeHeader         *header;         /**< 節點 */  
  31. };  
  32.   
  33. /** 
  34.  * \struct NodeContext 
  35.  * \brief 節點列表目錄 
  36.  */  
  37. struct NodeContext {  
  38.     bool         isInit;          /**< 是否已經初始化*/  
  39.     unsigned int refCount;        /**<引用計數器 */  
  40.     NodeList     *list;           /**< 節點列表頭 */  
  41. };  
Copyright © Linux教程網 All Rights Reserved