tcl lrange在引擎盖下创建原始列表的新副本

时间:2015-10-28 08:57:50

标签: list memory tcl

让我们说我有一个庞大的列表变量。如果我使用lrange命令从列表中引用范围,则tcl创建范围的副本,同时保留原始列表(假设返回值未保存到变量中),或使用某些不可变引用“sh”以节省记忆?

例如:让我们说我有列表变量biggie,我脚本的大约99%的内存占用了保存biggie列表。这条线是否会导致我的脚本几乎翻倍其内存占用?

foreach [ lrange $biggie 1 end-1 ]

由于

1 个答案:

答案 0 :(得分:2)

lrange命令复制列表元素。但是,消耗的内存量可能不是 double ;两个列表中存在的元素将通过引用处理。将要复制的内存将是存储指向元素的指针数组的内存;在32位系统上每个元素4个字节,在64位系统上每个元素8个字节(加上少量的固定开销)。

列表的任何字符串表示都不会被共享。