看板 EE_DSnP 關於我們 聯絡資訊
※ 引述《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) ←花了16B18B 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) ←花了16B46B 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
ric2k1:天哪... 真抱歉, 沒有好好測試 04/30 15:23
ric2k1:已更新 hw4.tgz 04/30 15:23
goodword:謝謝老師 04/30 18:34