我的 Frama-C 插件使用makeGlobalVar ~logic:true name type
. 这些 varinfo 在 AST 中不存在(它们是目标程序中分配函数调用结果的占位符,在分析期间“动态”创建)。如果我的插件注意不在这些 varinfo 上保留任何强指针,它们是否有机会被垃圾收集?或者它们是否注册在具有强指针的数据结构中?如果是这样,是否有可能使该数据结构变弱?OCaml 没有在其他语言的文献中发现的各种弱数据结构,但没有什么是定期显式通过清理空存根无法解决的问题。
现在想想,我什至可能不必创建 varinfo。不过现在换插件有点晚了。我使用的 varinfo 是 C 类型的名称和表示形式。函数makeGlobalVar
为名称提供了唯一性保证,我想这很好,只要它不会在过程中创建指向它或它的一部分的强指针。
语境:
假设您正在编写一个 C 解释器来执行调用malloc()
和free()
. 如果目标程序没有内存泄漏(它释放它分配的所有内容并且从不持有太多内存),您希望解释器的行为相同。