Tcl upvar性能改善与直接传递相比

时间:2015-09-22 14:55:30

标签: tcl proc upvar

这与Tcl 8.5有关 说我有一本非常大的字典。 从性能的角度(内存占用等),假设我不修改字典,upvar应该在内存方面提供巨大的性能提升吗?我正在使用具有TCL shell的EDA工具,但供应商禁用了TCL内存命令。我知道Tcl可以共享字符串以获得性能......相同的字典可以通过几个嵌套的过程'调用。 感谢。

2 个答案:

答案 0 :(得分:1)

只要您不修改字典,它就不会提供明显的性能差异或内存消耗差异。

Tcl通过不可变引用传递值,如果它们被共享(例如,在全局变量和局部变量之间)(过程形式参数是局部变量),则在向它们写入更新时复制它们。如果你从未改变任何东西,那么你将使用共享参考,一切都会很快。如果您确实需要更改某些内容,则应使用upvarglobal(或更奇特的变体之一)为调用者/全局变量创建局部变量别名并通过那是,这是最快的。但如果您要改变价值,这只是一个问题。

答案 1 :(得分:0)

我认为,在字典之下,字典不会被复制,直到它被写入,所以如果没有写,那么你应该没问题。如果你想绝对确定,请使用全局。

  proc myproc {} {
    global mydictionary
  }