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