【问题标题】:Tcl upvar performance improvement vs. direct passTcl upvar 性能改进与直接传递
【发布时间】:2015-09-22 14:55:30
【问题描述】:

这与 Tcl 8.5 相关 假设我有一本非常大的字典。 从性能的角度来看(内存占用等),假设我不修改字典,upvar 是否应该在内存方面提供巨大的性能改进?我正在使用具有 TCL shell 的 EDA 工具,但供应商禁用了 TCL 内存命令。我知道 Tcl 可以在后台共享字符串以提高性能...同一个字典可以传递几个嵌套的 procs 调用。 谢谢。

【问题讨论】:

    标签: tcl proc upvar


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我想在引擎盖下字典在被写入之前不会被复制,所以如果没有写入,那么你应该没问题。如果您想绝对确定,请使用全局变量。

        proc myproc {} {
          global mydictionary
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多