Delphi中全局变量和类变量的使用

Delphi中全局变量和类变量的使用,delphi,Delphi,我有一个关于全局变量和类变量使用class var的问题 使用类变量在类中声明变量: unit Unit1; interface type TClass = class public class var ObjectList: TObjectList end; implementation end. 声明全局变量: unit Unit1; interface var ObjectList: TObjectList implementation end. 编

我有一个关于全局变量和类变量使用
class var
的问题

使用
类变量
在类中声明变量:

unit Unit1;

interface

type
  TClass = class
  public
    class var ObjectList: TObjectList
  end;

implementation
end.
声明全局变量:

unit Unit1;

interface

var
  ObjectList: TObjectList

implementation
end.

编译器如何为这两个变量分配内存?

这些变量的实现方式完全相同。
类var
作为全局变量实现。也就是说,模块中只有一个静态分配的变量实例


唯一的区别是
类var
在不同的范围内,您可以使用可见性保护说明符,如
private
来限制对变量的访问。

值得一提的是,在这两种情况下
ObjectList
指针将驻留在数据段中。并完全回答他的问题(
编译器如何为这两个变量分配内存?
),这两个变量的内存分配将在静态数据段中。对于引用类型,只有指针分配在数据段中,对象空间在运行时以通常的方式(在堆上)动态分配。我不想在这里谈论特定于平台的实现细节。模块中只有一个变量实例。这是所需的心理记忆模型。这很公平,但他的具体问题是如何为这些变量分配内存。我认为完整的答案至少应该解决这个问题,即使它是提供了一个开放的答案(即:“这取决于平台”)。@J…实际上是我问了这部分问题。看看编辑。我想他真的只是想知道这些选项之间的区别。在我看来,重要的不是数据段,而是有一个实例。