Delphi 类变量是不是具有全局或线程本地存储?
Posted
技术标签:
【中文标题】Delphi 类变量是不是具有全局或线程本地存储?【英文标题】:Do Delphi class vars have global or thread local storage?Delphi 类变量是否具有全局或线程本地存储? 【发布时间】:2010-09-10 01:46:24 【问题描述】:我的猜测是类变量(“class var”)在存储中是真正的全局变量(即整个应用程序的一个实例)。
但我想知道是否是这种情况,或者它们是否是存储中的线程(例如,类似于“threadvar”) - 每个线程一次实例。
有人知道吗?
编辑:将“范围”更改为“存储”,因为这实际上是正确的术语,也是我所追求的(感谢 Barry)
【问题讨论】:
【参考方案1】:类变量根据其成员可见性属性进行作用域,并且具有全局存储,而不是线程存储。
范围是一个句法概念,与从何处可见的标识符有关。这里关心的是变量的存储。
【讨论】:
【参考方案2】:是的,类变量是全局范围的。查看 RTL 源代码,了解如何实现 threadvars 的详细信息。在 Win32 下,每个线程可以在创建线程时自动分配一块内存。这个额外的数据区域用于包含您的线程变量。
【讨论】:
我毫不怀疑你是对的。想知道系统应该如何工作......这是一个需要权威“是/否”答案的问题,我想知道在“接受”答案之前我应该考虑多少票是“权威”的。怎么办,怎么办……? 丹尼尔的回答是正确的,我投了赞成票。我想知道您是否可以通过将类 var 引用到线程 var 来使用一些技巧?没有尝试过 - 也不会尝试:) @Lars - 我怀疑将 standard 类字段而不是“class var”引用到 threadvar 就足够了。如果对象/变量的生命周期在引用对象的实例之外,并且需要一个 threadvar,则该生命周期已经提供,因此无需进一步的诡计。 ^ 顺便说一句,我也想知道同样的事情,但仅出于兴趣。事实上,这个问题也是出于兴趣考虑(我不需要立即获取此信息),并且是由另一个关于类变量的问题引发的。 我已经接受了这个答案,看来我们都同意/知道它是正确的。但是,为了将来可能偶然发现它的任何人,在这里获得外部参考会很好..【参考方案3】:类变量就像类一样:对应用程序来说是全局且唯一的。
【讨论】:
以上是关于Delphi 类变量是不是具有全局或线程本地存储?的主要内容,如果未能解决你的问题,请参考以下文章