作者goodword (佳話)
看板EE_DSnP
標題[問題] 關於 _recycleList[0]
時間Thu Apr 30 00:14:04 2009
以下以32位元解釋
我們知道 sizeof(MemTestObj) 是
14Bytes
可是在32位元上 是4B為單位
在此作業 是經過 toSizeT(t) 轉換後變成要 allocate
16B 的大小
可為何ref 會把 剩下
14B 的記憶體 Recycling to
_recycleList[0]
此操作可由以下指令測試:
mcalc> mtr 30
Resetting memMgr...(30)
mcalc> mtn 2
Calling alloc...(14)
Calling MemMgr::getMem...(14)
Memory acquired... 0x8288c30
Calling alloc...(14)
Calling MemMgr::getMem...(14)
Recycling 0x8288c40 to _recycleList[0] ←here
New MemBlock... 0x829b1f8
Memory acquired... 0x8288c98
這麼一來若再打上 mtn 1
mcalc> mtn 1
Calling alloc...(14)
Calling MemMgr::getMem...(14)
Recycled from _recycleList[0]...0x8288c40
則勢必從_recycleList[0]來allocate記憶體
可recycle進去的應該只有
14B
怎麼夠一個MemTestObj物件 要allocate 的
16B用呢?
這樣應該會不會有重覆使用的情形呢?
還是最後那 2B MemTestObj物件 永遠不會去動到?
不曉得大家看不看懂我的問題
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.252.220
1F:推 ric2k1:我檢查看看... 04/30 00:24
2F:→ goodword:同樣的問題 18B 也會recycle進_recycleList[1] 04/30 00:28
3F:→ goodword:而其實mtn 1 -a 1 需要20B 04/30 00:29
4F:推 ric2k1:天哪... 一個地方忘記 toSizeT(S) 了... orz 又要 update 04/30 00:36
5F:→ ric2k1:reference programs 了... (今年沒事不應該改題目的 sigh) 04/30 00:37
6F:→ ric2k1:感謝抓到這個 bug! 04/30 00:37
7F:→ goodword:謝謝老師 老師辛苦了!!! 04/30 00:40