0

我的 Frama-C 插件使用makeGlobalVar ~logic:true name type. 这些 varinfo 在 AST 中不存在(它们是目标程序中分配函数调用结果的占位符,在分析期间“动态”创建)。如果我的插件注意不在这些 varinfo 上保留任何强指针,它们是否有机会被垃圾收集?或者它们是否注册在具有强指针的数据结构中?如果是这样,是否有可能使该数据结构变弱?OCaml 没有在其他语言的文献中发现的各种弱数据结构,但没有什么是定期显式通过清理空存根无法解决的问题。

现在想想,我什至可能不必创建 varinfo。不过现在换插件有点晚了。我使用的 varinfo 是 C 类型的名称和表示形式。函数makeGlobalVar为名称提供了唯一性保证,我想这很好,只要它不会在过程中创建指向它或它的一部分的强指针。

语境:

假设您正在编写一个 C 解释器来执行调用malloc()free(). 如果目标程序没有内存泄漏(它释放它分配的所有内容并且从不持有太多内存),您希望解释器的行为相同。

4

1 回答 1

2

如果您没有明确地将 varinfos 注册到其中一个Globals表中,Frama-C 不会为您执行此操作(事实上,如果您这样做,您应该在 AST 中添加它们的声明,反之亦然) ,所以我猜你在这里是安全的。就内核而言,唯一可见的副作用应该是Vid计数器的递增。但是请注意, makeGlobalVar 本身并不能保证 的vname唯一性,而只能保证该vid字段的唯一性。

于 2013-08-22T06:39:38.933 回答