作者goodword (佳话)
看板EE_DSnP
标题Re: [情报] Homework #4 更正
时间Thu Apr 30 08:51:41 2009
※ 引述《ric2k1 (Ric)》之铭言:
: [更正]
: 7. 修正 #1925 篇关於 reference program 的一个 bug:
: 当 _activeBlock's remaining size 大於等於 MemTestObj, 但又不足下一个
: 4 or 8-Byte align 的大小, 应不予以 recycle, 而是 new 下一个 memory block.
: 更新 "memTest-32/64" 以及 "memTest-32/64.debug"
嗯嗯 关於这个bug
recycle to _recycleList[0] 是 OK 了
但我在 #1925 内的推文所述 _recycleList[1] ... 好像没有改到耶??
以下是用 ./memTest-32.debug 的执行结果
mtest> mtr 34
Resetting memMgr...(34)
mtest> mtn 1
Calling alloc...(14)
Calling MemMgr::getMem...(14) ←花了
16B 剩
18B
Memory acquired... 0x8b3ec30
mtest> mtn 1 -a 1 ←1个长度是1的array 大小为14+4=
18B
Calling allocArr...(18)
Calling MemMgr::getMem...(18) ←toSizeT(18)=
20B
Recycling 0x8b3ec40 to _recycleList[1] ←here!!
New MemBlock... 0x8b3ece0
Memory acquired... 0x8b3ecf8
在这个例子里 mtn 1 之後剩下
18B
可是 mtn 1 -a 1 需要
20B的空间
当然不够 故要New MemBlock 这点ref是没有错的
可是它却仍然把 剩下的
18B Recycling to _recycleList[1]
这不是自相矛盾吗?
明明就是不够才要 New MemBlock
却又把剩余不够的丢到 _recycleList[1] 给後面的mtn 1 -a 1用?
同样的 只要是奇数的 _recycleList[x] 都还是有问题 像:
mtest> mtr 62
Resetting memMgr...(62)
mtest> mtn 1
Calling alloc...(14)
Calling MemMgr::getMem...(14) ←花了
16B 剩
46B
Memory acquired... 0x8b3ed20
mtest> mtn 1 -a 3
Calling allocArr...(46)
Calling MemMgr::getMem...(46) ←toSizeT(46)=
48B 故仍然是不够的
Recycling 0x8b3ed30 to _recycleList[3] ←但这里仍recycle到 _recycleList[3]
New MemBlock... 0x8b3edf0
应该只能recycle到 _recycleList[2]
Memory acquired... 0x8b3ee08
可能又要麻烦老师了
还是我有那里误解??
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.252.220
1F:推 ric2k1:天哪... 真抱歉, 没有好好测试 04/30 15:23
2F:→ ric2k1:已更新 hw4.tgz 04/30 15:23
3F:→ goodword:谢谢老师 04/30 18:34