我在一些文本中看到Tcl使用引用计数进行垃圾收集。我想知道这意味着什么,因为据我所知,Tcl没有指针或引用,所以每个变量只被引用一次。究竟是什么计算呢?
答案 0 :(得分:3)
这个想法是Tcl引用了值,而不是变量。
让我们引用the wiki page on copy-on-write semantics:
每个值(Tcl_Obj)都有一个引用计数。只要将值传递给命令或赋值给变量,引用计数就会递增,并且不会进行复制。当要更改值时,实现首先检查引用计数。如果计数为1,则没有其他对该值的引用,并且可以对其进行更改。如果计数大于1,则还有对该值的其他引用。如果要更改值,那么这些引用也将被更改。为了防止这种情况发生这种情况的副本(新引用计数为1),副本就会发生变化。
这个解释中唯一缺少的是当值的refcount下降belov 1时,该值被破坏。
有关核心信息,请阅读Tcl_Obj
manual page和these discussions的“对象的存储管理”部分。