編程語言中如何實現(xiàn)一個內(nèi)存池管理的類方法-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“編程語言中如何實現(xiàn)一個內(nèi)存池管理的類方法”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學習一下“編程語言中如何實現(xiàn)一個內(nèi)存池管理的類方法”這篇文章吧。

創(chuàng)新互聯(lián)建站是一家集成都做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)站頁面設(shè)計、網(wǎng)站優(yōu)化SEO優(yōu)化為一體的專業(yè)的建站公司,已為成都等多地近百家企業(yè)提供網(wǎng)站建設(shè)服務。追求良好的瀏覽體驗,以探求精品塑造與理念升華,設(shè)計最適合用戶的網(wǎng)站頁面。 合作只是第一步,服務才是根本,我們始終堅持講誠信,負責任的原則,為您進行細心、貼心、認真的服務,與眾多客戶在蓬勃發(fā)展的市場環(huá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)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)建站bm7419.com,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

網(wǎng)站標題:編程語言中如何實現(xiàn)一個內(nèi)存池管理的類方法-創(chuàng)新互聯(lián)
文章鏈接:http://bm7419.com/article0/dpoeio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站自適應網(wǎng)站、網(wǎng)站導航、域名注冊、手機網(wǎng)站建設(shè)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)