看板 EE_DSnP 關於我們 聯絡資訊
以下以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
ric2k1:我檢查看看... 04/30 00:24
goodword:同樣的問題 18B 也會recycle進_recycleList[1] 04/30 00:28
goodword:而其實mtn 1 -a 1 需要20B 04/30 00:29
ric2k1:天哪... 一個地方忘記 toSizeT(S) 了... orz 又要 update 04/30 00:36
ric2k1:reference programs 了... (今年沒事不應該改題目的 sigh) 04/30 00:37
ric2k1:感謝抓到這個 bug! 04/30 00:37
goodword:謝謝老師 老師辛苦了!!! 04/30 00:40