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