• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-91  評(píng)論-137  文章-0  trackbacks-0
            繼上篇《簡(jiǎn)單堆結(jié)構(gòu)的實(shí)現(xiàn)》之后修改了下代碼,使內(nèi)存的分配效率更高.
            首先將HeapApplyed和HeapUsed包含進(jìn)一個(gè)結(jié)構(gòu)體HEAPATTR,各占1位.
            1     struct HEAPATTR
            2     {
            3         BYTE HeapApplyed : 1;
            4         BYTE HeapUsed : 1;
            5     }*HeapAttr;
            然后添加了一個(gè)HeapCurrent變量用于提高檢索速度.
            1 int        HeapCurrent;
            相應(yīng)的構(gòu)造函數(shù)和析構(gòu)函數(shù)修改為.
             1     Heap(const int Size = 1024 * 300)
             2         : HeapLength(Size),HeapCurrent(0),HeapLeft(Size)
             3     {
             4         HeapData = new CHAR[HeapLength];
             5         HeapAttr = new HEAPATTR[HeapLength];
             6         memset(HeapData,0,HeapLength);
             7         memset(HeapAttr,0,HeapLength);
             8     }
             9 
            10     ~Heap()
            11     {
            12         delete[] HeapData;
            13         delete[] HeapAttr;
            14     }
            注意:一個(gè)HEAPATTR結(jié)構(gòu)占1個(gè)字節(jié),實(shí)際上使用的只有2位,編譯器自動(dòng)為其補(bǔ)齊6位形成1字節(jié)(既然只有TRUE和FALSE沒(méi)理由要用HeapLength*2字節(jié))
            修改GetEmptyAddr算法,使其提升效率.
             1     CHAR* GetEmptyAddr(const int Size)
             2     {
             3         int Left = 0;
             4         for(int i=HeapCurrent;i<HeapLength;i++)
             5         {
             6             if(HeapAttr[i].HeapApplyed && !HeapAttr[i].HeapUsed) Left++;
             7             else Left = 0;
             8             if(Left == Size) return HeapData + i - Left + 1;
             9         }
            10         if(HeapCurrent > 0 && HeapCurrent > Size)
            11         {
            12             Left = 0;
            13             for(int i=0;i<HeapCurrent;i++)
            14             {
            15                 if(HeapAttr[i].HeapApplyed && !HeapAttr[i].HeapUsed) Left++;
            16                 else Left = 0;
            17                 if(Left == Size) return HeapData + i - Left + 1;
            18             }
            19         }
            20         return 0;
            21     }
            同時(shí)也將GetEmptyLeft修改為.
             1     inline int GetEmptyLeft(int Size)
             2     {
             3         int Left = 0;
             4         for(int i=HeapCurrent;i<HeapLength;i++)
             5         {
             6             if(!HeapAttr[i].HeapApplyed) Left++;
             7             else Left = 0;
             8             if(Left == Size) return i - Left + 1;
             9         }
            10         if(HeapCurrent > 0 && HeapCurrent > Size)
            11         {
            12             Left = 0;
            13             for(int i=0;i<HeapCurrent;i++)
            14             {
            15                 if(!HeapAttr[i].HeapApplyed) Left++;
            16                 else Left = 0;
            17                 if(Left == Size) return i - Left + 1;
            18             }
            19         }
            20         return 0;
            21     }
            添加DumpFile函數(shù)生成Dump文件.
            1     BOOL DumpFile(CHAR* FileName)
            2     {
            3         FILE* fp = fopen(FileName,"wt+");
            4         fwrite(HeapData,HeapLength,sizeof(CHAR),fp);
            5         fclose(fp);
            6         return TRUE;
            7     }

            最后給出完整代碼
            posted on 2011-02-22 17:29 lwch 閱讀(1910) 評(píng)論(1)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)

            評(píng)論:
            # re: 堆結(jié)構(gòu)的實(shí)現(xiàn)2 2013-05-03 15:58 | tb
            實(shí)現(xiàn)比較簡(jiǎn)單啊   回復(fù)  更多評(píng)論
              
            欧美激情精品久久久久| 99久久精品免费看国产免费| 久久97久久97精品免视看| 久久人妻少妇嫩草AV蜜桃| 亚洲熟妇无码另类久久久| 伊人久久精品无码av一区| 国产精品18久久久久久vr| 久久综合狠狠综合久久97色| 精品久久久久久国产| 久久精品成人免费观看97| 国内精品久久人妻互换| 久久精品一本到99热免费| 久久精品国产精品国产精品污| 久久人人妻人人爽人人爽| 久久久国产乱子伦精品作者| 国产精品嫩草影院久久| 亚洲国产精品婷婷久久| 囯产极品美女高潮无套久久久| 美女写真久久影院| 久久久久久九九99精品| 狠狠色丁香久久婷婷综合蜜芽五月| 国产精品日韩欧美久久综合| 久久综合香蕉国产蜜臀AV| 香蕉久久夜色精品国产2020| 久久久久99精品成人片| 久久电影网一区| 久久99国产综合精品| 日韩欧美亚洲综合久久| 热RE99久久精品国产66热| 日产久久强奸免费的看| 久久www免费人成精品香蕉| 久久免费视频网站| 久久久久久a亚洲欧洲aⅴ| 无码人妻久久久一区二区三区 | 性做久久久久久免费观看| 精品精品国产自在久久高清| 久久久久人妻精品一区 | 久久久受www免费人成| 午夜不卡888久久| 精品久久久无码中文字幕| 久久国产成人精品国产成人亚洲|