- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Z3 有两种模式:自动引用计数和手动。
我了解手动引用计数的工作原理。感谢例子。
但是在自动引用计数的情况下,Z3 怎么知道什么时候删除 AST 节点呢?
由于 Z3_ast 是 C 语言中的一个结构体 => 不可能在 Z3 创建后跟踪 Z3_ast 在 Z3 之外的所有分配和用法。
还是仅在 Z3 内的 Z3 轨道引用? 如果您这样做,则不会对引用计数器进行更新,例如:ast1 = ast2。
最佳答案
自动模式使用非常简单的策略。每当 AST 返回给用户时,Z3 将其存储在堆栈中 S
并增加其引用计数器。
当Z3_push
函数执行完毕,Z3保存栈大小S
.当匹配Z3_pop
执行时,栈的大小S
恢复,并且从堆栈中弹出的 AST 的引用计数器递减。
这种模式非常好用,但它有一个主要问题:内存消耗。例如,如果 Z3_push
和 Z3_pop
不使用,那么用户创建的所有 AST 将永远不会被删除。
关于z3 - Z3_ast 是否引用计数 Z3 之外的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7505516/
我正在使用_ast进行一些代码分析,并在获取导入函数的名称时遇到了问题。 假设我的代码文件 ( code.py ) 如下所示: import somemod def foo(): somemo
我有一个返回类型“_ast.Dict”的 ast 对象 我如何将其转换为常规字典? 我失败的尝试 - type(item.value) -> eval(item.value) -> *** Type
我正在使用 python 3.4.3,并且正在使用 python 抽象语法树 (ast) 模块。我查看了 ast.py 模块的源代码,发现所有 ast 节点类都在 ast.py 模块导入的 _ast
我是一名优秀的程序员,十分优秀!