【发布时间】:2018-02-25 04:00:53
【问题描述】:
来自 Scott 的 Programming Language Pragmatics
对象的生命周期通常对应于三个主体之一 存储分配机制,用于管理对象的空间:
给静态对象一个绝对地址,在整个程序执行过程中都会保留该地址。
堆栈对象以后进先出的顺序分配和释放,通常与子例程调用和返回结合使用。
- 可以在任意时间分配和释放堆对象。它们需要更通用(也更昂贵)的存储管理 算法。
例如,在 C 中,静态对象必须用常量表达式(可以在编译时计算的表达式)初始化。
我不确定其他语言是否是这样,甚至其他语言也有静态对象。
一般来说,必须初始化静态对象吗?初始化时,是否必须使用可在编译时计算的表达式进行初始化?
通过初始化,我的意思是显式或隐式(即由语言实现自动完成),而不是 uninitializiation。 所以换个说法:一般来说,静态对象可以不被程序或编译器初始化吗?
谢谢。
【问题讨论】:
-
简短回答是“不”。但是,他们可能应该避免在程序后期出现未初始化的问题。
-
不完全正确,
static变量默认初始化为 0(或等效值),non static变量应实际初始化,否则内存堆栈中会出现一些垃圾值。
标签: c programming-languages computer-science lifetime storage-duration