成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++標準庫如何實現共享內存介紹

開發 后端
在C++中使用C++標準庫容器中的map,set,multimap,multiset進行測試,如果測試不通過時,主要原因是在內存回收的時候考慮不夠完全。

初次使用C++標準庫實現共享內存的管理時,Vector每次分配內存個數不固定,回收也不固定,這樣的話,程序還需要繼續完善,下面就隨本文的講述來讓大家進一步的了解C++中的C++標準庫。

內存池管理程序源碼如下:

  1. #ifndef MY_ALLOCATOR_H_   
  2. #define MY_ALLOCATOR_H_   
  3. #include "stdafx.h"   
  4. #include <limits>   
  5. #include <iostream>   
  6. namespace happyever    
  7. {   
  8.   enum { NODENUMS = 2 };   
  9.   union _Obj    
  10.   {   
  11.     union _Obj* M_free_list_link;   
  12.     char M_client_data[1];       
  13.   } ;   
  14.   typedef union _Obj Obj;   
  15.   struct _Cookie   
  16.   {   
  17.     int iShmKey;        /* 共享內存鍵值 */   
  18.     int iShmID;         /* iShmKey對應的shmid */   
  19.     int iSemKey;        /* 鎖信號鍵值 */   
  20.     int iSemID;         /* 鎖信號標識 */   
  21.     int iTotalsize;    /* 容器總容量 */   
  22.     void* pStartall;   /* 共享內存自身地址 */   
  23.     char* pStartfree;  /* 自由空間的開始地址*/   
  24.     char* pEndfree;    /* 自由空間的結束地址*/   
  25.     int iUseNum[NODENUMS];   
  26.     /*用來存放free_list中節點的size*/   
  27.     short sFreelistIndex[NODENUMS];   
  28.     /*存放分配內存節點的鏈表*/   
  29.     Obj* uFreelist[NODENUMS];   
  30.   };   
  31.   typedef struct _Cookie Cookie;   
  32.   //Obj;   
  33.   //Cookie;   
  34.   static Cookie *pHead = NULL;   
  35.   template <class T>   
  36.   class MyAlloc    
  37.   {   
  38.   private:   
  39.     static const int ALIGN = sizeof(Obj);   
  40.     int round_up(int bytes);   
  41.     int freelist_index(int bytes);   
  42.     int freelist_getindex(int bytes);   
  43.     char* chunk_alloc(int size, int *nobjs);   
  44.     void* refill(int num,int n);   
  45.   public:   
  46.     // type definitions   
  47.     typedef T        value_type;   
  48.     typedef T*       pointer;   
  49.     typedef const T* const_pointer;   
  50.     typedef T&       reference;   
  51.     typedef const T& const_reference;   
  52.     typedef std::size_t    size_type;   
  53.     typedef std::ptrdiff_t difference_type;   
  54.     template <class U>   
  55.     struct rebind    
  56.     {   
  57.       typedef MyAlloc<U> other;   
  58.     };  

以上程序只要稍微修改,就可以實現共享內存的管理,可以方便的使用C++標準庫提供的容器。加上信號量的鎖機制。以上為了學習而改寫的SGI的stl二級分配算法實現的。以上代碼存在一定的局限性。

我另外完整實現了共享內存管理的STL標準的alloctor程序,使用posix信號量加鎖。目前應用在aix的xlC編譯環境下。因為源碼涉及公司的商業秘密,所以不能公開。但基本上以上源碼已經體現了自己管理內存的完整思路,供這方面需求的朋友一起學習研究用。

【編輯推薦】

  1. 簡介學習C++總結之談
  2. 對C++庫函數進行學習探索總結筆記
  3. C++類庫設計的基本構思與方法
  4. C++語言真的還有市場價值?
  5. C++類庫設計的基本構思與方法
責任編輯:chenqingxiang 來源: NET130
相關推薦

2010-01-14 15:46:27

C++標準庫

2010-01-19 09:39:43

C++標準程序庫

2010-01-19 09:39:43

C++標準程序庫

2010-01-19 18:04:02

C++標準程序庫

2010-01-26 13:55:07

C++標準模板庫

2010-02-03 16:35:45

C++回文

2010-02-03 14:10:28

C++內存邏輯區域

2010-01-25 14:56:08

C++程序

2024-05-06 11:19:20

內存池計算機編程

2010-01-14 09:43:26

C++標準程序庫

2010-02-03 16:04:34

C++標準類庫

2010-01-14 09:55:30

C++標準庫

2019-09-18 09:05:26

微軟開源Windows

2010-02-03 15:52:55

C++ clock()

2022-09-22 10:22:36

C++編程語言代碼

2010-01-15 14:59:54

C++標準程序庫

2010-01-13 10:09:24

C++標準庫

2010-02-01 16:54:18

C++打印地址信息

2011-06-21 10:17:41

c++內存模型

2010-01-15 15:52:18

CC++
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品99久久久久 | 日韩免费一区二区 | 欧美一区二区三区在线播放 | 超碰精品在线观看 | 找个黄色片 | www操操 | 国产a视频 | 九九热免费看 | 色吧综合网 | a级黄色网 | 亚洲成人免费视频在线观看 | 欧美韩一区二区三区 | 亚洲成人午夜电影 | 国产视频久久 | 天天射夜夜操 | 国产精品99久久久久久久vr | 国产高清在线视频 | 日本免费一区二区三区 | 黄色免费在线网址 | 一级高清免费毛片 | 人人射人人草 | 奇米超碰| 日本天堂视频 | 国产精品自产拍在线观看蜜 | 91精品国产综合久久婷婷香蕉 | 日韩久久久久久 | 狠狠躁躁夜夜躁波多野结依 | 精品久久一区二区三区 | 欧美精品久久久久 | 91在线精品播放 | 精品九九九 | 成人性生交大片免费看中文带字幕 | 久久国产日韩欧美 | 国产欧美日韩一区二区三区在线 | 欧美日韩在线播放 | 天天插天天射天天干 | 精品国产精品一区二区夜夜嗨 | 久久精品国产99国产精品 | 欧美日韩国产高清视频 | 日韩一区二区三区在线观看视频 | 国产精品视频999 |