2

我在一些文章中看到过 Tcl 使用引用计数来进行垃圾收集。我想知道这意味着什么,因为据我所知,Tcl 没有指针或引用,所以每个变量只被引用一次。那么它到底在计算什么呢?

4

1 回答 1

4

这个想法是 Tcl 对而不是变量进行引用计数。

让我们引用关于写时复制语义的 wiki 页面

每个值 (Tcl_Obj) 都有一个引用计数。每当将值传递给命令或分配给变量时,引用计数就会增加,并且不会进行复制。当要更改值时,实现首先检查引用计数。如果计数为 1,则没有其他对该值的引用,并且可以就地更改。如果计数大于 1,则有其他对该值的引用。如果要更改该值,则这些引用也将更改。为了防止这种情况发生,制作了一个值的副本(新的引用计数为 1),并在原地更改了副本。

这个解释中唯一缺少的是,当一个值的引用计数下降到 belov 1 时,该值被销毁。

有关核心信息,请阅读Tcl_Obj手册页的“对象存储管理”部分和这些 讨论

于 2012-07-16T08:15:38.700 回答