国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

實現一個內存池管理的類方法

2020-01-26 14:18:12
字體:
來源:轉載
供稿:網友

模擬STL中的freelist,有這個思想在內。

union obj{ union obj* next; char p[1];   };class MemoryPool{    public:      MemoryPool()      {        union obj* temp;        m_memory.assign(5,(union obj*)NULL);             for(int i=0;i<m_memory.size();i++)        {          for(int j=0;j<m_memory.size();j++)          {           temp = (obj*)malloc(sizeof(char)*(1<<(i+3)));              temp->next = m_memory[i];           m_memory[i] = temp;           }        }      }      char* mem_get(int size)      {        int j;        if( size > 128)        {         char* start = (char*)malloc(sizeof(char)*size);         return start;         }        int index = freelist_index(size);        obj* temp = m_memory[index];        if(temp == NULL) //        {         for(j = index+1;j<m_memory.size();j++)         {           temp = m_memory[j];           if(temp != NULL)           {            m_memory[j] = temp->next;            break;               }            }         if(j>= m_memory.size())         {           for(int j=0;j<m_memory.size();j++)          {           temp = (obj*)malloc(sizeof(char)*(1<<(index+3)));              temp->next = m_memory[index];           m_memory[index] = temp;           }           temp = m_memory[index];          m_memory[index] = temp->next;          return (char*)temp;         }         else         {           obj* cur;                     int up_size = round_up(size);           for(int i=0;i<(1<<(j-index));i++)           {            cur = temp;            cur->next = m_memory[index];            m_memory[index] = cur;            temp = cur+up_size;                    }            temp = m_memory[index];           m_memory[index] = temp->next;           return (char*)temp;         }           }        else        {          m_memory[index] = temp->next;         return (char*)temp;         }      }      void mem_free(void* p,int size)      {       if(size > 128)       {        free(p);        return ;         }         obj* temp = (obj*)p;       int index = freelist_index(size);       temp->next = m_memory[index];       m_memory[index] = temp;      }   private:       enum {_ALIGN = 8};//       int freelist_index(int __bytes)        {         return (((__bytes) + (int)_ALIGN-1)/(size_t)_ALIGN - 1);       }       int round_up(int __bytes)        {         return (((__bytes) + (int) _ALIGN-1) & ~((int) _ALIGN - 1));        }       vector<union obj*> m_memory;    };

以上這篇實現一個內存池管理的類方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 天柱县| 平远县| 阳谷县| 若尔盖县| 普格县| 牟定县| 从化市| 芜湖县| 英吉沙县| 罗平县| 友谊县| 金华市| 柘城县| 侯马市| 德格县| 乐都县| 彭阳县| 西昌市| 灯塔市| 专栏| 九寨沟县| 襄垣县| 弥渡县| 康定县| 大同市| 泰宁县| 双流县| 富蕴县| 巴彦县| 浪卡子县| 晋中市| 台安县| 长子县| 木里| 波密县| 托克托县| 资中县| 克东县| 嘉荫县| 土默特右旗| 丹巴县|