作为一个对象存储在内存中意味着什么

What does it mean to be stored as an object in memory?

本文关键字:意味着 什么 内存 一个对象 存储      更新时间:2023-10-16

在TC++PL中,作者说

如果且仅当您使用初始化(静态)成员的方式要求将其作为对象存储在内存中,该成员必须在某个地方唯一定义。

然而,我不知道作为对象存储在内存中意味着什么。我猜静态成员已经在内存中了,不管它类的对象是实例化的。为了便于您参考,作者介绍了一个例子。

class Curious {
public:
    static const int cl = 7;
    ....
}
const int Curious::cl;

它看起来像是某种实例化。然而,我不知道为什么这是必要的。我们可以直接访问Curious::cl。

现在,我们还假设class Curious在一个头文件中,它包含在6个不同的源文件中(s1.cpp到s6.cpp为它们命名)。

出于某种"正当理由",我们需要取cl的地址。。。

编译器应该把这个cl变量放在什么位置?请注意,当编译器完成它的工作时,它(通常)一次只能看到一个源文件,因此它不知道Curious类定义发生了多少次,因此static const int cl = 7;也不知道在代码中出现了多少次。所以它不能说"哦,我在s1.cpp中有一个cl,所以当我编译s2.cpp…s6.cpp时,我不需要它"。

换句话说,编译器需要您的帮助才能将cl"放置"到对象文件中。

[在嵌入式系统中,这可能会变得更有趣,因为数据可能在内存的不同"部分"中,这取决于您将其编译为哪个源文件,因此为cl选择的内存可能会根据您使用的源文件而变化计算机,这是一个小得多的问题,但语言定义仍然不知道你将如何使用语言,所以必须在可能重要的地方迎合各种变体]。