让我们说我有一个庞大的列表变量。如果我使用lrange
命令从列表中引用范围,则tcl创建范围的副本,同时保留原始列表(假设返回值未保存到变量中),或使用某些不可变引用“sh”以节省记忆?
例如:让我们说我有列表变量biggie,我脚本的大约99%的内存占用了保存biggie列表。这条线是否会导致我的脚本几乎翻倍其内存占用?
foreach [ lrange $biggie 1 end-1 ]
由于
答案 0 :(得分:2)
lrange
命令复制列表元素。但是,消耗的内存量可能不是 double ;两个列表中存在的元素将通过引用处理。将要复制的内存将是存储指向元素的指针数组的内存;在32位系统上每个元素4个字节,在64位系统上每个元素8个字节(加上少量的固定开销)。
列表的任何字符串表示都不会被共享。