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