作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] _refCount的意義
時間Sun Jun 15 19:18:19 2008
: : 如果輸入
: : breset 2 107 107
: : bsetv 1 a
: : bsetv 2 b
: : band a_b a b
: : brep a_b -addr -ref
: : [2](+) 0x9e88b78 (1)
: : [1](+) 0x9e888c8 (2)
: : [0](+) 0x9e88808 (8)
: : [0](-) 0x9e88808 (8) (*)
: : [0](-) 0x9e88808 (8) (*)
: 不好意思,我想請問這個例子的幾個問題:
: (1) level 1 的 refCount 為什麼是 2?我算出來有 a_b.getBddNodeInt()->_left,
: a, _supports[1] 共 3 個,看起來的結果才是對的?還是例子不同?
Please note:
加到 _bddMap 裡面的 BddNode 並不會增加 reference count,
主要是要讓 dead (unused) node 的判斷不會受到 _bddMap 的影響.
所以 a 在 bsetv 1 a 之後就存到 _bddMap 了, 而並不會增加 0x9e888c8 的 ref count,
上面例子的 ref count = 2 ==> a_b+, _supports[1]
你可以繼續再下一個指令:
brep a -ref -addr
你可以看到 0x9e888c8 的 ref count 現在變成 3 了, why?
因為在 brep 這個指令 裡面會宣告一個 local variable 來 call "operator <<",
所以 ref count 會加一
(這也是為什麼 brep a_b 時 0x9e88b78 的 ref count = 1)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.133.144
1F:推 yongling:謝謝老師~~ 06/15 19:59