亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 6530 | 回復(fù): 12
打印 上一主題 下一主題

[算法] 實(shí)現(xiàn)了一個(gè)大小內(nèi)存管理程序 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-08-25 21:06 |只看該作者 |倒序?yàn)g覽
最近閑來(lái)無(wú)事,做了一個(gè)內(nèi)存管理的程序,實(shí)現(xiàn)大小內(nèi)存的申請(qǐng)和批量釋放, 主要是為了解決小內(nèi)存申請(qǐng)時(shí)的產(chǎn)生內(nèi)存碎片的問(wèn)題。
    大體做法如下:申請(qǐng)一個(gè)內(nèi)存池,然后在該內(nèi)存池申請(qǐng)大內(nèi)存和小內(nèi)存;小內(nèi)存直接在內(nèi)存池的存儲(chǔ)區(qū)域存放;大內(nèi)存則要先自動(dòng)產(chǎn)生一個(gè)內(nèi)存頭,然后在其它地方分配內(nèi)存,內(nèi)存頭也存放在內(nèi)存池的存儲(chǔ)區(qū)域內(nèi)。
   
    參照以下資料做的:http://www.tbdata.org/archives/1390

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2011-08-26 11:24 |只看該作者
不知道lz實(shí)現(xiàn)的內(nèi)存池的小對(duì)象的內(nèi)存大小界界限是多少?128字節(jié)嗎?

我讀過(guò)sgi stl 的內(nèi)存池,覺(jué)得非常短小精悍,lz可以看看參考一下。

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
3 [報(bào)告]
發(fā)表于 2011-08-26 12:02 |只看該作者
不知道lz實(shí)現(xiàn)的內(nèi)存池的小對(duì)象的內(nèi)存大小界界限是多少?128字節(jié)嗎?

我讀過(guò)sgi stl 的內(nèi)存池,覺(jué)得非常短 ...
ydfgic 發(fā)表于 2011-08-26 11:24


現(xiàn)在覺(jué)得此類普適性的內(nèi)存池簡(jiǎn)直一點(diǎn)用也沒(méi)有, sdi stl 的內(nèi)存池算法估計(jì)malloc/new 自己的實(shí)現(xiàn)就干了, 根本用不著再做一次。
覺(jué)得只有 slab 適用時(shí), 做自己的緩存才有點(diǎn)意義

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2011-08-26 13:09 |只看該作者
現(xiàn)在覺(jué)得此類普適性的內(nèi)存池簡(jiǎn)直一點(diǎn)用也沒(méi)有, sdi stl 的內(nèi)存池算法估計(jì)malloc/new 自己的實(shí)現(xiàn)就干了 ...
zylthinking 發(fā)表于 2011-08-26 12:02



    此言差矣,sgi stl對(duì)小于128字節(jié)的小內(nèi)存是有很高效的內(nèi)存池算法的。
malloc 的效率低是公認(rèn)了的,特別是多線程環(huán)境,要不哪用出那么多內(nèi)存池的。
我常用的內(nèi)存池是 sgi stl,boost::pool, TCMalloc,各有千秋。
對(duì)象內(nèi)存池上面三個(gè)也都有實(shí)現(xiàn)。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2011-08-26 13:12 |只看該作者
我是一直沒(méi)覺(jué)得內(nèi)存分配效率不夠高的

估計(jì)咱做的都是小項(xiàng)目吧。。。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2011-08-26 13:54 |只看該作者
順序存取速度永遠(yuǎn)是最快的。不知道樓主想解決什么問(wèn)題,不同的問(wèn)題有不同的解決辦法。例如,是想讀得快,還是想寫得快,還是想純粹不產(chǎn)生內(nèi)存碎片?

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
7 [報(bào)告]
發(fā)表于 2011-08-26 15:03 |只看該作者
此言差矣,sgi stl對(duì)小于128字節(jié)的小內(nèi)存是有很高效的內(nèi)存池算法的。
malloc 的效率低是公認(rèn)了的 ...
ydfgic 發(fā)表于 2011-08-26 13:09


malloc 的效率是誰(shuí)公認(rèn)低了?
sgi stl 內(nèi)存池自然有其優(yōu)點(diǎn), 但毛病也不小
1。 無(wú)法處理大塊內(nèi)存申請(qǐng)吧, 如果處理大塊內(nèi)存申請(qǐng), 要么內(nèi)存塊的跨度必須大, 就是浪費(fèi)內(nèi)存;  要么要求鏈表數(shù)量足夠多, 如果鏈表數(shù)量足夠多, 循環(huán)又要多了(分配2, 結(jié)果該鏈表沒(méi)有, 去4的里面找, 也沒(méi)有, 去6的鏈表找, 再?zèng)]有。。。。)
2。 無(wú)法內(nèi)存回收吧, 除非它再加上buddy 系統(tǒng), 可是至少sgi stl 沒(méi)有; 它就是一個(gè)動(dòng)態(tài)平衡算法, 適應(yīng)的峰值不高的應(yīng)用, 如果一瞬間要求2G的內(nèi)存, 然后剩下的1個(gè)月, 只要求1M的內(nèi)存, 它的表現(xiàn)不咋地

* Why use this malloc?
0042

0043
  This is not the fastest, most space-conserving, most portable, or
0044
  most tunable malloc ever written. However it is among the fastest
0045
  while also being among the most space-conserving, portable and tunable.
0046
  Consistent balance across these factors results in a good general-purpose
0047
  allocator for malloc-intensive programs.

0048

0049
  The main properties of the algorithms are:
0050
  * For large (>= 512 bytes) requests, it is a pure best-fit allocator,
0051
    with ties normally decided via FIFO (i.e. least recently used).
0052
  * For small (<= 64 bytes by default) requests, it is a caching
0053
    allocator, that maintains pools of quickly recycled chunks. 這個(gè)是不是sgi stl 的基本手法???

0054
  * In between, and for combinations of large and small requests, it does
0055
    the best it can trying to meet both goals at once.
0056
  * For very large requests (>= 128KB by default), it relies on system
0057
    memory mapping facilities, if supported.
0058

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2011-08-26 20:01 |只看該作者
回復(fù) 7# zylthinking


    你說(shuō)得兩點(diǎn)只說(shuō)對(duì)了一半。
sgi stl 的分配是按照 8字節(jié)為單位,圓整到8的倍數(shù),當(dāng)申請(qǐng)字節(jié)數(shù)小于128時(shí),有這16個(gè)鏈表。
申請(qǐng)2,4,6,8都是在8字節(jié)的鏈表里找節(jié)點(diǎn)的。如果8字節(jié)的不夠,向16字節(jié)的鏈表要內(nèi)存,分割成兩個(gè)8字節(jié)。如果16也沒(méi)有再向24字節(jié)要,以此類推到128字節(jié)。如果超過(guò)了128字節(jié)字節(jié)調(diào)用malloc 返回。
同理釋放也是大于128字節(jié)的直接free了。
那么會(huì)存在申請(qǐng)的內(nèi)存是不會(huì)釋放的,但是對(duì)大于128字節(jié)的是會(huì)free掉的。

malloc的問(wèn)題是分配還是比較快,但是它的回收算法包含了合并內(nèi)存塊,是比較慢的,所以才有那么多自己實(shí)現(xiàn)的內(nèi)存池。
另外多線程環(huán)境是很慢(因?yàn)闊o(wú)緩存,一個(gè)大鎖進(jìn)行保護(hù))?梢钥碩CMALLOC的測(cè)試結(jié)果。

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
9 [報(bào)告]
發(fā)表于 2011-08-27 00:12 |只看該作者
回復(fù)  zylthinking


    你說(shuō)得兩點(diǎn)只說(shuō)對(duì)了一半。
sgi stl 的分配是按照 8字節(jié)為單位,圓整到8的倍數(shù) ...
ydfgic 發(fā)表于 2011-08-26 20:01


我走個(gè)大概意思, 你倒是斤斤計(jì)較是2還是8了

論壇徽章:
11
未羊
日期:2013-12-16 12:45:4615-16賽季CBA聯(lián)賽之青島
日期:2016-04-11 19:17:4715-16賽季CBA聯(lián)賽之廣夏
日期:2016-04-06 16:34:012015亞冠之卡爾希納薩夫
日期:2015-11-10 10:04:522015亞冠之大阪鋼巴
日期:2015-07-30 18:29:402015亞冠之城南
日期:2015-06-15 17:56:392015亞冠之卡爾希納薩夫
日期:2015-05-15 15:19:272015亞冠之山東魯能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16賽季CBA聯(lián)賽之八一
日期:2016-07-22 09:41:40
10 [報(bào)告]
發(fā)表于 2011-08-27 00:19 |只看該作者
本帖最后由 zylthinking 于 2011-08-27 00:34 編輯
回復(fù)  zylthinking
malloc的問(wèn)題是分配還是比較快,但是它的回收算法包含了合并內(nèi)存塊,是比較慢的,所以才有那么多自己實(shí)現(xiàn)的內(nèi)存池。
另外多線程環(huán)境是很慢(因?yàn)闊o(wú)緩存,一個(gè)大鎖進(jìn)行保護(hù))?梢钥碩CMALLOC的測(cè)試結(jié)果。
ydfgic 發(fā)表于 2011-08-26 20:01


best fit 會(huì)合并內(nèi)存塊嗎? 有些拿不準(zhǔn)了。。。。。。如果那樣, 還best fit 什么啊, 直接挖chunk就行了
多線程問(wèn)題不是很清楚, 但很顯然, 無(wú)緩存和有鎖沒(méi)直接關(guān)系, sgi stl就沒(méi)有鎖了?
還有, 沒(méi)有緩存, 那合并內(nèi)存塊從何說(shuō)起?
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP