• <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>

            那誰的技術(shù)博客

            感興趣領(lǐng)域:高性能服務(wù)器編程,存儲,算法,Linux內(nèi)核
            隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
            數(shù)據(jù)加載中……

            研究了一下SGI STL的內(nèi)存算法

            原理在STL源碼剖析中已經(jīng)有闡述,這里簡單的說一下,該內(nèi)存池采用HASH-LIST數(shù)據(jù)結(jié)構(gòu)管理數(shù)據(jù),分配一塊內(nèi)存時,如果所要求的內(nèi)存超過了某個數(shù)量就直接調(diào)用malloc分配內(nèi)存, 否則首先進行數(shù)據(jù)對齊,根據(jù)這個對齊的結(jié)果得到所在的HASH表,在該HASH-LIST中查找時候存在可用的節(jié)點,如果有就直接返回,否則每次以20個節(jié)點元素為數(shù)量開始增加LIST中的元素數(shù)量,如果仍然分配失敗了就去下一個HASH表中查找可用內(nèi)存,依次類推.

            比如,這里的實現(xiàn)對齊大小為512字節(jié),如果要求分配的內(nèi)存不大于512字節(jié)就自動調(diào)整為512字節(jié)的數(shù)據(jù)大小,在512字節(jié)的HASH-LIST中查找可用節(jié)點.

            代碼和測試程序見附件,個人認為很巧妙,適合小對象的頻繁分配/釋放,效率比之單純的使用malloc/free提高了很多.

            不知道還有哪些優(yōu)秀的內(nèi)存池實現(xiàn)算法可以參考的?

            BTW:這份代碼不是我寫的,網(wǎng)上搜索所得,作者模擬了SGI STL的內(nèi)存池算法,我自己做了一些整理和注釋,向作者致敬.

            另外,在我的機器上的測試結(jié)果為:
            采用內(nèi)存池:
            real    0m10.723s
            user    0m10.710s
            sys     0m0.000s

            采用系統(tǒng)的malloc/free:
            real    0m12.969s
            user    0m12.950s
            sys     0m0.000s

            點擊這里下載代碼.

            posted on 2008-04-01 19:55 那誰 閱讀(6644) 評論(6)  編輯 收藏 引用 所屬分類: C\C++算法與數(shù)據(jù)結(jié)構(gòu)服務(wù)器設(shè)計

            評論

            # re: 研究了一下SGI STL的內(nèi)存算法  回復(fù)  更多評論   

            http://www.shnenglu.com/CppExplore/archive/2008/02/18/42890.html
            http://www.shnenglu.com/CppExplore/archive/2008/02/19/42952.html
            http://www.shnenglu.com/CppExplore/archive/2008/02/20/42986.html
            2008-04-01 21:00 | cppexplore

            # re: 研究了一下SGI STL的內(nèi)存算法[未登錄]  回復(fù)  更多評論   

            @cppexplore
            準備下一步研究在這里面評價最好的APR.

            其實說到實踐證明,STL和APR都是有成功項目證明的產(chǎn)品,可靠性會更高些.其他的畢竟還是個人的產(chǎn)品,沒有經(jīng)過千錘百煉.

            2008-04-01 22:39 | 創(chuàng)

            # re: 研究了一下SGI STL的內(nèi)存算法  回復(fù)  更多評論   

            @創(chuàng)
            你看的第一篇吧,對于小對象后面的loki和boost都不錯的。
            不要浪費精力研究了,就是一個結(jié)構(gòu),原理都很簡單,看的太仔細了也是沒什么意思,呵呵。
            2008-04-01 22:50 | cppexplore

            # re: 研究了一下SGI STL的內(nèi)存算法[未登錄]  回復(fù)  更多評論   

            @cppexplore
            另外,很奇怪你的系列文章中居然沒有分析STL內(nèi)存池實現(xiàn)的。
            2008-04-01 22:51 | 創(chuàng)

            # re: 研究了一下SGI STL的內(nèi)存算法  回復(fù)  更多評論   

            @創(chuàng)
            呵呵,不奇怪啊。我壓根就沒看stl的內(nèi)存池,ACE的看了,果然是集大成者,到是想寫呢,后來寫多了加上去寫其他方面的 就懶了。
            現(xiàn)在網(wǎng)絡(luò)模型的也是寫了一半,下一篇估計就是去寫定時期了,呵呵
            2008-04-01 22:53 | cppexplore

            # re: 研究了一下SGI STL的內(nèi)存算法  回復(fù)  更多評論   

            去看了下cppex的文章,發(fā)現(xiàn)問了句廢話,呵呵,已經(jīng)改掉了。
            希望看到ACE內(nèi)存池詳細分析的文章。
            2008-04-02 01:46 | 矩陣操作
            国产AV影片久久久久久| 久久精品麻豆日日躁夜夜躁| 精品久久久久国产免费| 久久伊人影视| 色婷婷综合久久久久中文| 国内精品久久国产大陆| 久久久久无码专区亚洲av| 久久久久亚洲av综合波多野结衣| 久久精品国产亚洲AV忘忧草18| 久久夜色精品国产噜噜麻豆| 国内精品久久久久久中文字幕| 色综合久久88色综合天天 | 久久精品国产99久久久| 色播久久人人爽人人爽人人片aV| 久久精品无码专区免费青青 | 色综合久久久久综合99| 亚洲国产精品无码成人片久久| 国产精品久久久久久久久免费| 亚洲国产香蕉人人爽成AV片久久| 久久96国产精品久久久| 亚洲精品高清国产一线久久| 一本久久a久久精品综合夜夜| 久久亚洲精品成人无码网站| 国产综合精品久久亚洲| 久久久久人妻一区二区三区vr| 欧美亚洲日本久久精品| 精品综合久久久久久88小说| 久久精品国产亚洲沈樵| 精品国产乱码久久久久久郑州公司| 亚洲国产精品无码久久青草| 久久天天躁狠狠躁夜夜2020| 99久久国产主播综合精品| 99精品久久精品一区二区| 亚洲国产欧美国产综合久久| 久久婷婷色综合一区二区| 秋霞久久国产精品电影院| 精品熟女少妇av免费久久| 2021少妇久久久久久久久久| 久久无码人妻一区二区三区午夜| 色播久久人人爽人人爽人人片AV| 香蕉久久久久久狠狠色|