Z3_ast是否在Z3之外引用计数引用计数?

时间:2011-09-21 19:29:29

标签: z3

在Z3中有2种模式:自动参考计数和手动。

我理解手动引用计数的工作原理。谢谢你的例子。

但Z3如何知道何时在自动引用计数中删除AST节点? 由于Z3_ast是来自C语言的结构=>在Z3创建之后,无法跟踪Z3_ast之外的所有分配和用法。

或Z3仅在Z3内跟踪引用?如果您执行以下操作,则不会对ref计数器进行更新:ast1 = ast2。

1 个答案:

答案 0 :(得分:5)

自动模式使用非常简单的策略。每当AST返回给用户时,Z3将其存储在堆栈S上并递增其引用计数器。 执行Z3_push函数时,Z3会保存堆栈S的大小。当执行匹配Z3_pop时,将恢复堆栈S的大小,并且从堆栈弹出的AST的引用计数器递减。 这种模式非常容易使用,但它有一个主要问题:内存消耗。例如,如果未使用Z3_pushZ3_pop,则永远不会删除用户创建的所有AST。