Z3\u ast reference counting是否统计Z3之外的引用?

Z3\u ast reference counting是否统计Z3之外的引用?,z3,Z3,在Z3中有两种模式:自动参考计数和手动 我了解手动参考计数的工作原理。多亏了这个例子 但Z3如何知道在自动引用计数情况下何时删除AST节点? 由于Z3_ast是C语言=>中的一个结构,因此在创建Z3_ast之后,不可能跟踪Z3_ast在Z3之外的所有赋值和用法 或仅Z3内部的Z3轨道引用?如果您这样做,则不会更新引用计数器,例如:ast1=ast2。自动模式使用非常简单的策略。每当AST返回给用户时,Z3将其存储在堆栈S上,并递增其参考计数器。 执行Z3_push功能时,Z3保存堆栈的大小S。当

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

我了解手动参考计数的工作原理。多亏了这个例子

但Z3如何知道在自动引用计数情况下何时删除AST节点? 由于Z3_ast是C语言=>中的一个结构,因此在创建Z3_ast之后,不可能跟踪Z3_ast在Z3之外的所有赋值和用法


或仅Z3内部的Z3轨道引用?如果您这样做,则不会更新引用计数器,例如:ast1=ast2。

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