作者goodword (佳話)
看板EE_DSnP
標題Re: [問題] 回收時候的問題
時間Mon May 4 07:23:24 2009
※ 引述《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)
1F:→ goodword:改個錯字~~ 05/04 07:49
2F:推 cdyerty:...我真得是 mtd 的時候才做~ 謝啦!! 05/04 10:27
3F:推 suzuki1207:同樓上 @@ 才出生就挖好墳墓感覺怪怪的>u<| (逃~) 05/04 11:42
4F:→ goodword:哈哈 樓上的說法讓我笑了 05/04 13:15