我的Frama-C插件使用makeGlobalVar ~logic:true name type
创建了一些varinfos。这些varinfos在AST中不存在(它们是在目标程序中调用分配函数的结果的占位符,在分析期间“动态”创建)。如果我的插件注意不要将任何强指针放在这些varinfos上,他们是否有机会被垃圾收集?或者他们是否在具有强指针的数据结构中注册?如果是这样,是否有可能使该数据结构变弱? OCaml没有variety of weak data structure found in the literature for other languages,但是没有任何定期显式传递来清理空存根无法修复。
现在我想到了,我甚至可能不必创建varinfo。但现在改变我的插件有点晚了。我使用varinfo的是名称和C类型的表示。函数makeGlobalVar
为名称提供了单一性的保证,我猜这很好,只要它不会在过程中创建一个强大的指针或部分名称。
假设您正在编写C解释器来执行调用malloc()
和free()
的C程序。如果目标程序没有内存泄漏(它释放了它分配的所有内容并且永远不会占用太多内存),那么您希望解释器的行为相同。
答案 0 :(得分:2)
如果你没有明确地将varinfos注册到Globals
表之一,Frama-C将不会为你做(事实上,如果你这样做,你应该添加他们的声明在AST,反之亦然),所以我猜你在这里很安全。就内核而言,唯一可见的副作用应该是Vid
计数器的增量。但请注意,makeGlobalVar本身并不保证vname
的唯一性,而只保证vid
字段的唯一性。