最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

實現(xiàn)一個內(nèi)存池管理的類方法

 更新時間:2017年01月09日 09:20:06   投稿:jingxian  
下面小編就為大家?guī)硪黄獙崿F(xiàn)一個內(nèi)存池管理的類方法。小編覺得挺不錯的現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

模擬STL中的freelist,有這個思想在內(nèi)。

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; 
   };

以上這篇實現(xiàn)一個內(nèi)存池管理的類方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言深入探索數(shù)據(jù)類型的存儲

    C語言深入探索數(shù)據(jù)類型的存儲

    使用編程語言進行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么
    2022-07-07
  • C語言數(shù)據(jù)結(jié)構(gòu)旋轉(zhuǎn)鏈表的實現(xiàn)

    C語言數(shù)據(jù)結(jié)構(gòu)旋轉(zhuǎn)鏈表的實現(xiàn)

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)旋轉(zhuǎn)鏈表的實現(xiàn)的相關(guān)資料,這里提供實例幫助大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08
  • c++之std::get_time和std::put_time

    c++之std::get_time和std::put_time

    std::get_time和std::put_time是C++中用于日期和時間的格式化和解析的函數(shù),它們都包含在<iomanip>頭文件中,std::get_time用于從輸入流中解析日期時間字符串,而std::put_time則用于將std::tm結(jié)構(gòu)格式化為字符串
    2024-10-10
  • 基于OpenCV和C++ 實現(xiàn)圖片旋轉(zhuǎn)

    基于OpenCV和C++ 實現(xiàn)圖片旋轉(zhuǎn)

    這篇文章主要介紹了基于OpenCV和C++ 實現(xiàn)圖片旋轉(zhuǎn),幫助大家更好的利用c++處理圖片,感興趣的朋友可以了解下
    2020-12-12
  • C++成員解除引用運算符的示例詳解

    C++成員解除引用運算符的示例詳解

    這篇文章主要介紹了C++成員解除引用運算符,本例子在編譯期間給指針賦值,在更為復(fù)雜的類中,可以使用指向數(shù)據(jù)成員和方法的成員指針,需要的朋友可以參考下
    2022-01-01
  • C++實現(xiàn)LeetCode(160.求兩個鏈表的交點)

    C++實現(xiàn)LeetCode(160.求兩個鏈表的交點)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(160.求兩個鏈表的交點),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++控制臺實現(xiàn)俄羅斯方塊游戲

    C++控制臺實現(xiàn)俄羅斯方塊游戲

    這篇文章主要為大家詳細(xì)介紹了C++控制臺實現(xiàn)俄羅斯方塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • C++中讀寫txt文件并分離字符的方法

    C++中讀寫txt文件并分離字符的方法

    今天小編就為大家分享一篇C++中讀寫txt文件并分離字符的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • C++中類的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說明

    C++中類的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說明

    這篇文章主要介紹了C++中類的成員函數(shù)及內(nèi)聯(lián)函數(shù)使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 詳解C++ Qt中堆疊窗體的使用案例

    詳解C++ Qt中堆疊窗體的使用案例

    這篇文章主要為大家詳細(xì)介紹了C++ Qt中堆疊窗體的使用案例,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)QT有一定的幫助,感興趣的小伙伴可以了解一下
    2023-08-08

最新評論

赤峰市| 黔江区| 年辖:市辖区| 万源市| 白沙| 平山县| 武邑县| 广平县| 桐乡市| 梅州市| 乌鲁木齐市| 永年县| 盈江县| 雷波县| 丰顺县| 涟水县| 桦南县| 赤城县| 仁怀市| 嘉定区| 高平市| 师宗县| 崇明县| 屯门区| 夏邑县| 连南| 梁河县| 弋阳县| 额尔古纳市| 宜君县| 新余市| 阿克苏市| 溆浦县| 伊吾县| 阳春市| 九龙城区| 阳谷县| 贺兰县| 抚松县| 仙桃市| 和政县|