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

C++內(nèi)存管理之簡易內(nèi)存池的實現(xiàn)

 更新時間:2021年12月14日 14:32:15   作者:Kayden_Cheung  
大家好,本篇文章主要講的是C++內(nèi)存管理之簡易內(nèi)存池的實現(xiàn),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下

什么是內(nèi)存池?

頻繁的調(diào)用 malloc 會影響運(yùn)行效率以及產(chǎn)生額外的 cookie, 而內(nèi)存池的思想是預(yù)先申請一大塊內(nèi)存,當(dāng)有內(nèi)存申請需求時,從內(nèi)存池中取出一塊內(nèi)存分配給目標(biāo)對象。

它的實現(xiàn)過程為:

預(yù)先申請 chunk 大小的內(nèi)存池, 將內(nèi)存池劃按照對象大小劃分成多個內(nèi)存塊。以鏈表的形式,即通過指針將內(nèi)存塊相連,頭指針指向第一個空閑塊。當(dāng)有內(nèi)存申請需求時,首先檢查頭指針是否指向空閑塊,如果是則將頭指針指向的第一個空閑塊分配出去(從鏈表移除),同時頭指針指向下一個空閑塊;若頭指針為空,說明當(dāng)前內(nèi)存池已分配完,需要重新申請新的內(nèi)存池。當(dāng)有內(nèi)存釋放需求時,將釋放的內(nèi)存塊重新加入鏈表的表頭,調(diào)整頭指針指向新加入的空閑塊。這也意味著,如果申請了多個內(nèi)存池,在內(nèi)存釋放的過程中會慢慢的合并到一起。

初步實現(xiàn)

在上面的代碼中設(shè)置一個內(nèi)存池為5個內(nèi)存塊,當(dāng)我們進(jìn)行100次內(nèi)存申請后,打印出前10個地址查看,可以看到前5個地址是連續(xù)的,后5個也是連續(xù)的,但中間由于重新申請了內(nèi)存池,所以不是連續(xù)的。

但是這樣的方法還存在著問題,那就是引入了額外的指針內(nèi)存消耗,接下來將使用embedded pointer進(jìn)行改進(jìn)。

使用嵌入指針改進(jìn)

上面就使用到了嵌入指針,一個 AirplaneRep 對象的大小為 8 字節(jié),而一個 Airplane 的指針大小為 4 字節(jié)或 8 字節(jié)。在 32 位機(jī)器下, 指針可以借用 AirplaneRep 對象所占的 8 字節(jié)內(nèi)存空間中的前 4 個字節(jié),用來連接空閑的內(nèi)存塊。而當(dāng)內(nèi)存塊需要被分配給對象時,此時它已從鏈表中移除,也就不需要指針來連接了。此時的 8 字節(jié)內(nèi)存空間由 AirplaneRep 占據(jù)。當(dāng)內(nèi)存釋放時也是同理,由于 Rep 和 next 不會同時用到,所以 embedded pointer 的做法可以減少內(nèi)存消耗。

更簡化:static allocator

前面的實現(xiàn)需要為每個類都重寫 operator new 和 operator delete,由于內(nèi)容是一樣的,使用另一個類來完成這些重復(fù)的操作。

如此一來,我們的 class 只需要去調(diào)用 allocator 即可完成內(nèi)存的申請和釋放工作。

macor for static allocator

在上面的 Foo 和 Goo 中,每次還要寫一大堆重復(fù)的內(nèi)容,于是可以使用宏進(jìn)一步簡化:

到此這篇關(guān)于C++內(nèi)存管理之簡易內(nèi)存池的實現(xiàn)的文章就介紹到這了,更多相關(guān)C++內(nèi)存池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ 實現(xiàn)對象池的具體方法

    C++ 實現(xiàn)對象池的具體方法

    本文主要介紹了C++ 實現(xiàn)對象池的具體方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • CFile與CStdioFile的文件讀寫使用方法詳解

    CFile與CStdioFile的文件讀寫使用方法詳解

    以下是對CFile與CStdioFile的文件讀寫使用方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • C++構(gòu)造函數(shù)一些常見的坑

    C++構(gòu)造函數(shù)一些常見的坑

    這篇文章主要給大家分享的是C++構(gòu)造函數(shù)一些常見的坑,文章圍繞C++構(gòu)造函數(shù)的相關(guān)資料展開關(guān)于C++構(gòu)造函數(shù)坑的內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-01-01
  • Qt實現(xiàn)部件透明陰影效果與不規(guī)則窗體詳解

    Qt實現(xiàn)部件透明陰影效果與不規(guī)則窗體詳解

    這篇文章主要為大家詳細(xì)介紹了Qt實現(xiàn)部件透明陰影效果與不規(guī)則窗體的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-01-01
  • Qt實現(xiàn)字幕無間隙滾動效果

    Qt實現(xiàn)字幕無間隙滾動效果

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt實現(xiàn)字幕無間隙滾動效果,文中的實現(xiàn)過程講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-11-11
  • QT樹的具體項目實現(xiàn)

    QT樹的具體項目實現(xiàn)

    本文主要介紹了QT樹的具體項目實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 關(guān)于C++中vector的兩個小tips分享

    關(guān)于C++中vector的兩個小tips分享

    這篇文章主要給大家介紹了關(guān)于C++中vector的兩個小tips,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • VSstudio中scanf返回值被忽略的原因及解決方法(推薦)

    VSstudio中scanf返回值被忽略的原因及解決方法(推薦)

    這篇文章主要介紹了VSstudio中scanf返回值被忽略的原因及其解決方法,scanf返回值被忽略,接下來我就告訴大家該如何解決這個問題,需要的朋友可以參考下
    2022-09-09
  • 淺談C++的淺拷貝出現(xiàn)的錯誤

    淺談C++的淺拷貝出現(xiàn)的錯誤

    下面小編就為大家?guī)硪黄獪\談C++的淺拷貝出現(xiàn)的錯誤。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 關(guān)于win32 gettimeofday替代方案

    關(guān)于win32 gettimeofday替代方案

    下面小編就為大家?guī)硪黄P(guān)于win32 gettimeofday替代方案。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12

最新評論

大余县| 定远县| 南投县| 布拖县| 莱阳市| 乾安县| 尚义县| 忻州市| 西畴县| 阳信县| 常山县| 内丘县| 遂川县| 巴马| 淅川县| 元江| 井冈山市| 汪清县| 民勤县| 滨州市| 黔西县| 墨江| 黑山县| 驻马店市| 临湘市| 淳化县| 丽江市| 砚山县| 岐山县| 木里| 筠连县| 称多县| 祁东县| 峡江县| 屯留县| 泸定县| 哈尔滨市| 敦煌市| 淄博市| 黑龙江省| 清水河县|