看板 EE_DSnP 關於我們 聯絡資訊
※ 引述《cdyerty (cdyerty)》之銘言: : 就是 如果打出以下指令 : : mtn 1 -a 256 : mtn 1 -a 512 : mtd -i 1 -a // 回收 arrsize = 512 : mtd -i 0 -a // 回收 arrsize = 256 : // 兩個都是回收再recycleList[0] : 先回收512 再回收256 : 我的程式 mtp : recycleList 為 : : [512]=1 [256]=1 : 但跑老師的ref檔 在同一個recycleList[m]裡面好像會自動按大小排序 : 結果為 : [256]=1 [512]=1 : 請問這個也需要去處理嘛!? : 謝謝~ 老師的結果會是這樣沒錯 你可以試試以下兩段指令的不同 : mtn 1 -a 256 mtn 1 -a 512 mtn 1 -a 512 mtn 1 -a 256 mtd -i 1 -a mtd -i 1 -a mtd -i 0 -a mtd -i 0 -a 其結果為 : [256]=1 [512]=1 [512]=1 [256]=1 其實根本就不關先回收誰 是誰先被allocate出來 以下是我的解釋 : 就是recycle list 是照 size % 256 之後的大小來排 (因為是 _recycleList[i] 來判斷 然後i慢慢增加) 然後就要看allocate的順序了 (因為有這行 ll = ll->_nextList; 的緣故) 就像: 以下是我的執行結果 ========================================= = Memory Manager = ========================================= * Block size : 65536 Bytes * Number of blocks : 2 * Free mem in last block: 26320 * Recycle list : [ 0] = 4 [768] = 2 [256] = 3 [512] = 2 [ 3] = 1 [ 48] = 1 [100] = 1 [139] = 1 [200] = 1 [456] = 1 ========================================= = class MemTest = ========================================= Object list --- oxxooxx Array list --- xoxxxxxoxoxooooxooooxooooxoxo 我是先 mtn 3 -a 768 mtn 3 -a 256 mtn 3 -a 512 mtn 7 所以在 _recycleList[0] 內的 _nextList 依序就是 0 -> 768 -> 256 -> 512 0 ~255 無論如何一定是第一個 所以mtp出來後就會是那樣排 然後mtp 接下來就是餘3、48、100、139、 第三列的二個又都是200這樣 那至於你的問題 先看看你的指令順序有沒有一樣 就是倒底是誰先被allocate的 如果不是這個問題 可能就要看看是不是 在mtn的時候沒有allocate 在 mtd才做 ↑這應該不太可能發生吧.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.252.220 ※ 編輯: goodword 來自: 140.112.252.220 (05/04 07:49)
goodword:改個錯字~~ 05/04 07:49
cdyerty:...我真得是 mtd 的時候才做~ 謝啦!! 05/04 10:27
suzuki1207:同樓上 @@ 才出生就挖好墳墓感覺怪怪的>u<| (逃~) 05/04 11:42
goodword:哈哈 樓上的說法讓我笑了 05/04 13:15