作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] getMem
時間Mon Nov 23 00:38:20 2009
我以為這篇已經被回答了...
※ 引述《rmbp613030 (空氣)》之銘言:
: 請問在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]?
[0] ==> obj, size = 18
[1] ==> array[1], size = 22
[2] ==> array[2], size = 40
所以最大的回收是 array[1] 啊!
: New MemBlock... 0x8aa8d38
這個是 next _activeBlock 的 pointer address
: Memory acquired... 0x8aa8d50
: //為什麼開始存的位置跟MemBlock開始的位置會差24bytes?
這個是 new 一個 mem block 的 pointer address
中間被插了一些記憶體使用吧...
: 在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?
剩下的 4 個 Byte 比 sizeof(MemTestObj) 都還要小, 當然無法 recycle 了...
: New MemBlock... 0x8aa99e8
: 感謝回答
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.1.122