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