2017-09-16 211 views
0

从编程语言语用,由ScottC++静态对象中的类的静态数据成员和静态方法?

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

  1. 静态对象给出的绝对地址这在整个程序的执行过程中保留下来。

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

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

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

在编译时或运行时分配静态数据成员和类的静态方法的存储空间吗?

他们在哪里分配?

谢谢。

回答

1

PLP书籍中的C++静态对象中的类的静态数据成员和静态方法是什么?

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

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

如果分配,你的意思是内存分配,其内存占用是在编译时保留,空间被链接时(或在加载时动态加载)链接器的进程空间实际分配。无论如何,在运行时间之前。

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

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

他们在哪里分配?

无论链接器还是加载器决定。这可以通过编写你自己的链接脚本来影响(超出了恐怕这个答案的范围)。

+0

谢谢。 1. PLP中静态对象的静态方法是什么?运行时间之前分配了其存储空间吗? 2.在调用main()函数之前,在运行时初始化在文件或类范围声明的静态对象。“在C语言中,静态对象必须用”常量表达式“来初始化,如果我是正确的,那意味着静态对象在C编译时被初始化。C++与C不同之处在于静态对象是在运行时而不是编译时初始化的吗? 3.“他们在哪里分配?”这是正确的,他们没有分配堆栈或堆,但在静态区域? – Tim