作者rmbp613030 (空氣)
看板EE_DSnP
標題[問題] getMem
時間Sat Nov 21 16:06:40 2009
請問在32.debug裡面
mtest> mtr 123
Resetting memMgr...(124) //BlockSize=124
mtest> mtn 20 -a 5
Calling allocArr...(94)
Calling MemMgr::getMem...(94)
Memory acquired... 0x8aa8c30
Calling allocArr...(94)
Calling MemMgr::getMem...(94) //剩下28 bytes
Recycling 0x8aa8c90 to _recycleList[1] //為什麼這裡是丟到_recycleList[1]?
New MemBlock... 0x8aa8d38
Memory acquired... 0x8aa8d50
//為什麼開始存的位置跟MemBlock開始的位置會差24bytes?
在getMem裡面如果剩下的位置不夠就要recycle
然後new一塊新的MemBlock
這時候的recycle看起來不是用Free或FreeArr
那是怎麼recycle的?
繼續new另外一個array的時候
mtest> mtn 5 -a 3
Calling allocArr...(58)
Calling MemMgr::getMem...(58)
Recycling 0x8aa9860 to _recycleList[1] //把前面剩下28bytes刪掉
New MemBlock... 0x8aa9950
Memory acquired... 0x8aa9968
Calling allocArr...(58)
Calling MemMgr::getMem...(58)
Memory acquired... 0x8aa99a4
Calling allocArr...(58)
Calling MemMgr::getMem...(58)//124-(60+60)=4 剩下的四個bytes為什麼不用recycle?
New MemBlock... 0x8aa99e8
感謝回答
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.4.234
1F:推 INsoarDEEP:應該是剩下28byte時最多可以供給一個size=1的array用 11/21 17:12
2F:推 a3785lexx:我是沒有透過free或freeArr啦...直接在getMem裡面去 11/23 00:02
3F:→ a3785lexx:操作回收的動作...也許可以用free寫比較漂亮XD? 11/23 00:03
4F:→ a3785lexx:不好意思我沒有想過這個問題XD 11/23 00:03
5F:→ a3785lexx:剩下4個BYTES不用回收是因為不夠任何尺寸的class obj 11/23 00:04
6F:→ a3785lexx:使用,所以就放著不管了... 11/23 00:04