作者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