看板 EE_DSnP 關於我們 聯絡資訊
: : 如果輸入 : : 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
yongling:謝謝老師~~ 06/15 19:59