黄视频网站在线免费观看-黄视频网站在线看-黄视频网站在线观看-黄视频网站免费看-黄视频网站免费观看-黄视频网站免费

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > 既然有了tcmalloc或者ptmalloc這樣的庫,為什么還要自己寫內(nèi)存池呢?

既然有了tcmalloc或者ptmalloc這樣的庫,為什么還要自己寫內(nèi)存池呢?

來源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-10-13 06:23:29 1697149409

一、有了tcmalloc或者ptmalloc這樣的庫,還要自己寫內(nèi)存池的原因

1、可以定制化

自己編寫內(nèi)存池可以滿足更加個(gè)性化的需求,有效降低內(nèi)存使用,避免內(nèi)存碎片問題。通常一個(gè)應(yīng)用程序擁有自己獨(dú)特的內(nèi)存使用模式,自己編寫內(nèi)存池可以為特定的應(yīng)用程序場景量身定制。

2、內(nèi)存分配效率更高

自己編寫內(nèi)存池可以直接申請一大塊內(nèi)存空間,有效減少申請內(nèi)存的次數(shù)和時(shí)間。內(nèi)存池中的內(nèi)存可以被重復(fù)利用,降低內(nèi)存申請和釋放造成的成本。

3、可以減少鎖的爭用

在多線程環(huán)境下,TCMalloc和ptmalloc庫的內(nèi)部實(shí)現(xiàn)會(huì)使用同步機(jī)制來保證并發(fā)訪問的正確性,會(huì)造成鎖的爭用現(xiàn)象。自己編寫內(nèi)存池可以減少同步機(jī)制的使用,提高訪問速度。

4、可以更好的控制

自己編寫的內(nèi)存池可以比庫更好地控制內(nèi)存分配和釋放的行為,例如在某一個(gè)時(shí)間停止分配內(nèi)存等操作。

二、tcmalloc介紹

1、簡介

TCMalloc 是 Google 對 C 的 malloc() 和 C++ 的 operator new 的自定義實(shí)現(xiàn),用于在我們的 C 和 C++ 代碼中進(jìn)行內(nèi)存分配。 TCMalloc 是一種快速、多線程的 malloc 實(shí)現(xiàn)。

? TCMalloc為每個(gè)線程分配了緩存,這個(gè)緩存是線程私有的,可以減少多線程程序競爭。對于小對象的內(nèi)存分配,首先會(huì)去請求線程緩存,不用加鎖,如果緩存不能滿足的話,需要去向后面的內(nèi)存存儲(chǔ)結(jié)構(gòu)中獲取,此時(shí)需要加鎖獲取,因?yàn)槠渌€程可能正在獲取內(nèi)存空間,但是大部分情況下線程緩存就可以滿足內(nèi)存請求,所以幾乎不需要鎖。對于大對象的內(nèi)存分配,TCMalloc嘗試著使用細(xì)粒度和高效的自旋鎖。另外一個(gè)TCMalloc的好處是小對象內(nèi)存分配效率高。例如,分配n個(gè)8 byte的對象時(shí),使用大約8n * 1.01byte的空間,只有百分之一的空間浪費(fèi)。ptmalloc2分配內(nèi)存的方法為每個(gè)對象使用一個(gè)4 byte的標(biāo)頭,并且將大小四舍五入為8 byte的倍數(shù),最終使用16n byte。

2、TCMalloc架構(gòu)

我們可以將TCMlloc分為三部分:front-end;middle-end;back-end。 它們的職責(zé)分別是:

Front-end:是一個(gè)緩存,提供內(nèi)存快速分配和重分配內(nèi)存給應(yīng)用程序的功能。它主要有2部分組成:Per-thread cache和Per-CPU cache。Middle-end:負(fù)責(zé)給front-end提供緩存。當(dāng)front-end緩存不足時(shí),首先從middle-end中獲取。它由Central free list組成。Back-end:負(fù)責(zé)從系統(tǒng)獲取內(nèi)存。當(dāng)middle-end中的內(nèi)存不足時(shí),從back-end中獲取。它主要設(shè)計(jì)page heap的內(nèi)容。

3、小對象和大對象分配

TCMalloc維護(hù)了一份空間大小映射表,當(dāng)分配小對象內(nèi)存空間時(shí),會(huì)從這個(gè)表里尋找合適大小的內(nèi)存,點(diǎn)這里能都看到。例如,12字節(jié)的分配將會(huì)尋找16字節(jié)大小的內(nèi)存空間??臻g大小級別是為了在向上取最小滿足的內(nèi)存空間時(shí)減少浪費(fèi)。

? 如果分配的內(nèi)存空間大于1MB,那么直接從后端分配,因此,大對象內(nèi)存空間不會(huì)緩存在front-end和middle-end中。大對象分配時(shí)會(huì)向上取最小滿足頁大小的內(nèi)存空間。

Middle-end負(fù)責(zé)為 Front-end提供內(nèi)存以及把多余的內(nèi)存放回Back-end。Middle-end是由Transfer cache和Central free list組成。盡管Transfer cache和Central free list經(jīng)常被認(rèn)為是一個(gè)東西,但它們是有區(qū)別的。當(dāng)Front-end訪問Middle-end時(shí)需要先加鎖然后再獲取內(nèi)存,這會(huì)造成線性訪問的時(shí)間消耗。

三、內(nèi)存池介紹

1、基本概念

(Memory Pool)是一種內(nèi)存分配方式,又被稱為固定大小區(qū)塊規(guī)劃(fixed-size-blocks allocation)。通常我們習(xí)慣直接使用new、malloc等API申請分配內(nèi)存,這樣做的缺點(diǎn)在于:由于所申請內(nèi)存塊的大小不定,當(dāng)頻繁使用時(shí)會(huì)造成大量的內(nèi)存碎片并進(jìn)而降低性能。

內(nèi)存池則是在真正使用內(nèi)存之前,先申請分配一定數(shù)量的、大小相等(一般情況下)的內(nèi)存塊留作備用。當(dāng)有新的內(nèi)存需求時(shí),就從內(nèi)存池中分出一部分內(nèi)存塊,若內(nèi)存塊不夠再繼續(xù)申請新的內(nèi)存。這樣做的一個(gè)顯著優(yōu)點(diǎn)是,使得內(nèi)存分配效率得到提升。在內(nèi)核中有不少地方內(nèi)存分配不允許失敗。作為一個(gè)在這些情況下確保分配的方式,內(nèi)核開發(fā)者創(chuàng)建了一個(gè)已知為內(nèi)存池(或者是“mempool”)的抽象。一個(gè)內(nèi)存池真實(shí)地只是一類后備緩存,它盡力一直保持一個(gè)空閑內(nèi)存列表給緊急時(shí)使用。

2、實(shí)現(xiàn)示例

內(nèi)存池的實(shí)現(xiàn)有很多,性能和適用性也不相同,以下是一種較簡單的C++實(shí)現(xiàn)—GenericMP模板類。在這個(gè)例子中,使用了模板以適應(yīng)不同對象的內(nèi)存需求,內(nèi)存池中的內(nèi)存塊則是以基于鏈表的結(jié)構(gòu)進(jìn)行組織。GenericMP模板類定義:

template class GenericMP{public:static VOID *operator new(size_t allocLen){assert(sizeof(T) == allocLen);if(!m_NewPointer)MyAlloc();UCHAR *rp = m_NewPointer;m_NewPointer = *reinterpret_cast(rp); //由于頭4個(gè)字節(jié)被“強(qiáng)行”解釋為指向下一內(nèi)存塊的指針,這里m_NewPointer就指向了下一個(gè)內(nèi)存塊,以備下次分配使用。return rp;}static VOID operator delete(VOID *dp){*reinterpret_cast(dp) = m_NewPointer;m_NewPointer = static_cast(dp);}private:static VOID MyAlloc(){m_NewPointer = new UCHAR[sizeof(T) * BLOCK_NUM];UCHAR **cur = reinterpret_cast(m_NewPointer); //強(qiáng)制轉(zhuǎn)型為雙指針,這將改變每個(gè)內(nèi)存塊頭4個(gè)字節(jié)的含義。UCHAR *next = m_NewPointer;for(INT i = 0; i < BLOCK_NUM-1; i++){next += sizeof(T);*cur = next;cur = reinterpret_cast(next); //這樣,所分配的每個(gè)內(nèi)存塊的頭4個(gè)字節(jié)就被“強(qiáng)行“解釋為指向下一個(gè)內(nèi)存塊的指針, 即形成了內(nèi)存塊的鏈表結(jié)構(gòu)。}*cur = 0;}static UCHAR *m_NewPointer;protected:~GenericMP(){}};templateUCHAR *GenericMP::m_NewPointer;GenericMP模板類應(yīng)用class ExpMP : public GenericMP{BYTE a[1024];};int _tmain(int argc, _TCHAR* argv[]){ExpMP *aMP = new ExpMP();delete aMP;}

延伸閱讀1:ptmalloc簡介

ptmalloc是glibc默認(rèn)的內(nèi)存管理器。我們常用的malloc和free就是由ptmalloc內(nèi)存管理器提供的基礎(chǔ)內(nèi)存分配函數(shù)。ptmalloc有點(diǎn)像我們自己寫的內(nèi)存池,當(dāng)我們通過malloc或者free函數(shù)來申請和釋放內(nèi)存的時(shí)候,ptmalloc會(huì)將這些內(nèi)存管理起來,并且通過一些策略來判斷是否需要回收給操作系統(tǒng)。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
為什么mysql having的條件表達(dá)式可以直接使用select后的別名?

一、為什么mysql having的條件表達(dá)式可以直接使用select后的別名SQL語句的語法順序:FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> D...詳情>>

2023-10-13 08:02:25
css為什么要放在head標(biāo)簽中?

一、考慮加載順序和頁面渲染當(dāng)瀏覽器加載一個(gè)網(wǎng)頁時(shí),它會(huì)逐行解析HTML文檔,從上到下構(gòu)建文檔對象模型(DOM)。DOM樹的構(gòu)建過程是逐步進(jìn)行的,...詳情>>

2023-10-13 07:37:19
在數(shù)據(jù)庫查詢的底層實(shí)現(xiàn)上SQL Server和MySQL的區(qū)別是什么?

一、在數(shù)據(jù)庫查詢的底層實(shí)現(xiàn)上SQL Server和MySQL的區(qū)別1.MySQL是技術(shù)外殼架構(gòu) + 插件方式存儲(chǔ)引擎的方式,mysql復(fù)制語法解析,SQL優(yōu)化等,然后...詳情>>

2023-10-13 07:33:43
開發(fā)APP需要哪些第三方費(fèi)用?

1、服務(wù)器費(fèi)用如果你的應(yīng)用需要一個(gè)服務(wù)器來存儲(chǔ)和處理數(shù)據(jù),你需要支付服務(wù)器費(fèi)用。服務(wù)器費(fèi)用通常是每月收費(fèi)的,而且價(jià)格因服務(wù)提供商和服務(wù)...詳情>>

2023-10-13 06:42:42
Web應(yīng)用開發(fā)中常見的HTTP Server和技術(shù)組件有哪些?

一、Web應(yīng)用開發(fā)中常見的HTTP Server有哪些1、ApacheApache HTTP Server(簡稱Apache)是Apache軟件基金會(huì)的一個(gè)開放源碼的網(wǎng)頁服務(wù)器,可以在...詳情>>

2023-10-13 06:37:05
快速通道
免费一级片在线| 天堂网中文字幕| 成人免费福利片在线观看| 精品视频在线看 | 免费毛片基地| 国产亚洲免费观看| 午夜在线亚洲| 成人a级高清视频在线观看| 成人免费福利片在线观看| 国产精品1024永久免费视频| 欧美另类videosbestsex视频| 99久久精品费精品国产一区二区| 久久精品店| 九九免费精品视频| 成人高清视频在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日韩在线观看视频免费| 九九免费精品视频| 国产亚洲精品成人a在线| 欧美激情影院| 精品视频在线看 | 日韩专区第一页| 日本免费乱理伦片在线观看2018| 色综合久久天天综合绕观看| 日韩av成人| 国产成人啪精品| 国产不卡高清| 久久国产精品自线拍免费| 欧美α片无限看在线观看免费| 午夜久久网| 麻豆系列 在线视频| 可以免费看毛片的网站| 国产91精品露脸国语对白| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 四虎论坛| 国产国语在线播放视频| 91麻豆高清国产在线播放| 国产91丝袜在线播放0| 亚洲www美色| 国产成人精品综合| 尤物视频网站在线观看| 亚洲 男人 天堂| 成人影视在线观看| 九九精品影院| 亚洲精品永久一区| 久久精品成人一区二区三区| 国产精品免费久久| 日韩男人天堂| 精品视频免费在线| 精品久久久久久中文字幕2017| 色综合久久久久综合体桃花网| 深夜做爰性大片中文| 亚洲第一页乱| 青青久久精品| 午夜精品国产自在现线拍| 日本特黄特黄aaaaa大片| 免费国产一级特黄aa大片在线| 深夜做爰性大片中文| 午夜在线影院| 99色播| 99久久精品国产麻豆| 美女免费毛片| 欧美一区二区三区在线观看| 久久久久久久网| 日韩中文字幕一区| 欧美一区二区三区在线观看| 久久99中文字幕| 亚洲精品中文一区不卡| 色综合久久天天综合观看| 免费毛片基地| 999久久狠狠免费精品| 日本在线不卡视频| 久久99中文字幕久久| 国产成人精品一区二区视频| 国产成人女人在线视频观看| 色综合久久天天综合观看| 国产高清在线精品一区二区| 一级毛片看真人在线视频| 国产综合成人观看在线| 精品视频在线看 | 韩国三级香港三级日本三级| 欧美另类videosbestsex高清 | 成人免费观看视频| 欧美激情在线精品video| 毛片高清| 久久99中文字幕| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产精品123| 青青久久精品| 国产成人精品综合| 国产a视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 一级女人毛片人一女人| 美女免费毛片| 黄色福利| 国产美女在线一区二区三区| 国产不卡在线观看| 国产91精品一区| 欧美另类videosbestsex久久 | 二级特黄绝大片免费视频大片| 国产不卡高清| 色综合久久天天综合观看| 日韩中文字幕在线播放| 国产美女在线观看| 九九热国产视频| 91麻豆精品国产自产在线观看一区| 四虎影视久久| 999久久66久6只有精品| 欧美a级v片不卡在线观看| 亚洲精品影院一区二区| 成人高清免费| 日本特黄一级| 亚欧视频在线| 99热精品一区| 99久久精品国产免费| 色综合久久天天综合绕观看| 二级片在线观看| 日本特黄特色aaa大片免费| 国产亚洲精品成人a在线| 欧美日本国产| 欧美激情一区二区三区在线播放| 久久99中文字幕| 国产伦精品一区二区三区在线观看| 亚洲精品久久玖玖玖玖| 国产91精品露脸国语对白| 韩国三级香港三级日本三级| 色综合久久天天综线观看| 国产不卡在线观看| 日本在线不卡视频| 日韩中文字幕在线播放| 国产高清视频免费观看| 日日爽天天| 四虎影视库| 欧美国产日韩久久久| 可以免费看污视频的网站| 日韩中文字幕在线播放| 欧美另类videosbestsex高清 | 国产一区精品| 欧美激情一区二区三区在线播放 | 国产国语对白一级毛片| 国产精品123| 99热精品一区| 日本免费乱人伦在线观看| 99久久精品国产高清一区二区| 欧美大片一区| 美国一区二区三区| 九九久久99综合一区二区| 午夜激情视频在线观看| 国产不卡在线看| 日韩女人做爰大片| 国产伦精品一区二区三区无广告 | 国产原创中文字幕| 日韩综合| 欧美一区二区三区在线观看| 免费国产在线观看不卡| 天堂网中文在线| 黄视频网站免费观看| 午夜精品国产自在现线拍| 一级毛片看真人在线视频| 日韩字幕在线| 精品视频在线观看一区二区| 国产一区二区精品尤物| 黄视频网站免费| 九九精品在线| 黄色短视频网站| 日本伦理片网站| 午夜在线亚洲男人午在线| 国产福利免费观看| 一级毛片视频免费| 久久精品人人做人人爽97| 可以免费看毛片的网站| 精品视频在线观看免费| 九九精品在线| 精品国产香蕉在线播出| 91麻豆高清国产在线播放| 免费的黄色小视频| 二级片在线观看| 国产网站在线| 香蕉视频一级| 欧美激情一区二区三区在线| 成人免费观看视频| 免费一级片在线观看| 精品在线观看一区| 欧美α片无限看在线观看免费| 国产视频在线免费观看| 精品国产三级a∨在线观看| 91麻豆精品国产自产在线| a级毛片免费观看网站| 尤物视频网站在线观看| 高清一级毛片一本到免费观看| 亚洲www美色| 天天综合在线观看 | 国产不卡在线观看| 国产一区二区精品| 久久国产一久久高清| 尤物视频网站在线| 九九干| 亚洲精品久久久中文字| 午夜家庭影院| 麻豆网站在线看|