Tcl 内存管理

Tcl 内存管理,tcl,Tcl,我在几篇文章中提到Tcl使用引用计数进行垃圾收集。我想知道这意味着什么,因为据我所知,Tcl没有指针或引用,所以每个变量只被引用一次。那么,它到底在计数什么呢?这个想法是Tcl的引用计数基于值,而不是变量 让我们举出: 每个值(Tcl_Obj)都有一个引用计数。无论何时将值传递给命令或指定给变量,引用计数都会增加,并且不会进行复制。当要更改值时,实现首先检查引用计数。如果计数为1,则没有对该值的其他引用,可以就地更改。如果计数大于1,则存在对该值的其他引用。如果要就地更改该值,则这些引用也将更改

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

这个想法是Tcl的引用计数基于值,而不是变量

让我们举出:

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

此解释中唯一缺少的是,当值的refcount降到1以下时,该值将被销毁


有关核心信息,请阅读和的“对象的存储管理”部分。

其思想是Tcl的引用依赖于值,而不是变量

让我们举出:

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

此解释中唯一缺少的是,当值的refcount降到1以下时,该值将被销毁

有关核心信息,请阅读和的“对象的存储管理”部分