0

来自 Scott 的 Programming Language Pragmatics

对象生命周期通常对应于三种主要存储分配机制之一,用于管理对象的空间:

  1. 静态对象被赋予一个绝对地址,该地址在程序执行过程中被保留。

  2. 堆栈对象以后进先出的顺序分配和释放,通常与子程序调用和返回结合使用。

  3. 堆对象可以在任意时间分配和释放。它们需要更通用(也更昂贵)的存储管理算法。

PLP书中的C++静态对象中的类的静态数据成员和静态方法吗?

类的静态数据成员和静态方法的存储是在编译时还是运行时分配的?

它们分配在哪里?

谢谢。

4

1 回答 1

1

PLP书中的C++静态对象中的类的静态数据成员和静态方法吗?

静态数据成员,是的。函数内部的静态对象也是如此。还有在文件范围内声明的对象。

类的静态数据成员和静态方法的存储是在编译时还是运行时分配的?

如果通过分配,您的意思是内存分配,它们的内存占用是在编译时保留的,并且空间实际上是由链接器在链接时(或动态加载器在加载时)在进程空间中分配的。无论哪种情况,都在运行时间之前。

但是,在文件或类范围内声明的静态对象是在运行时初始化的,在 main() 函数被调用之前。

函数中定义的静态对象是不同的。它们在代码第一次流过它们时被初始化。

它们分配在哪里?

无论链接器或加载器决定在哪里。这可能会受到编写您自己的链接器脚本的影响(恐怕超出了这个答案的范围)。

于 2017-09-16T16:54:50.037 回答