Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcl upvar性能改进与直接通过_Tcl_Proc_Upvar - Fatal编程技术网

Tcl upvar性能改进与直接通过

Tcl upvar性能改进与直接通过,tcl,proc,upvar,Tcl,Proc,Upvar,这与Tcl 8.5有关 假设我有一本很大的字典。 从性能的角度(内存占用等),假设我不修改字典,upvar是否应该在内存方面提供巨大的性能改进?我使用的是一个EDA工具,它有TCL外壳,但供应商禁用了TCL内存命令。我知道Tcl可以在引擎盖下共享字符串以实现性能。。。同一个字典可以传递多个嵌套的进程调用。 谢谢。我可以想象,在写字典之前,字典是不会被复制的,所以如果没有人写,你应该没事。如果您想绝对确定,请使用全局搜索 proc myproc {} { global mydictio

这与Tcl 8.5有关 假设我有一本很大的字典。 从性能的角度(内存占用等),假设我不修改字典,upvar是否应该在内存方面提供巨大的性能改进?我使用的是一个EDA工具,它有TCL外壳,但供应商禁用了TCL内存命令。我知道Tcl可以在引擎盖下共享字符串以实现性能。。。同一个字典可以传递多个嵌套的进程调用。
谢谢。

我可以想象,在写字典之前,字典是不会被复制的,所以如果没有人写,你应该没事。如果您想绝对确定,请使用全局搜索

  proc myproc {} {
    global mydictionary
  }
只要不修改字典,它就不会提供太多明显的性能差异或内存消耗差异

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