歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux使用內存映射文件做內存池

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

日期:2017/3/1 10:24:53   编辑: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. * \struct Node
  13. * \brief 節點
  14. */
  15. struct Node {
  16. NodeHeader header; /**< 節點頭 */
  17. char *data; /**< 數據 */
  18. };
  19. /**
  20. * \struct NodeList
  21. * \brief 節點列表
  22. */
  23. struct NodeList {
  24. NodeList *next;
  25. unsigned int size; /**< 列表中節點的尺寸 */
  26. NodeHeader *header; /**< 節點 */
  27. };
  28. /**
  29. * \struct NodeContext
  30. * \brief 節點列表目錄
  31. */
  32. struct NodeContext {
  33. bool isInit; /**< 是否已經初始化*/
  34. unsigned int refCount; /**<引用計數器 */
  35. NodeList *list; /**< 節點列表頭 */
  36. };
Copyright © Linux教程網 All Rights Reserved