静态变量什么时候初始化 linux系统中,初始化的全局变量和未初始化过的全局变量保存在哪?
linux系统中,初始化的全局变量和未初始化过的全局变量保存在哪?
由C/C编译的程序所占用的内存分为以下几部分:1。堆栈由编译器自动分配和释放,存储函数参数和局部变量的值。其操作类似于数据结构中的堆栈。2堆通常由程序员分配和释放。如果程序员没有释放堆,那么在程序结束时,操作系统可能会恢复堆。注意,它在数据结构上与heap不同。分配方法类似链表,哈哈。三。全局区域(静态)-将全局变量和静态变量的存储放在一起。初始化的全局变量和静态变量在一个区域中,未初始化的全局变量和未初始化的静态变量在另一个相邻区域中。-程序完成后,由系统发布。4文本常量区域-常量字符串放在这里。程序完成后,系统发布5。程序代码区-函数体的二进制代码。
如何初始化一个类中的静态成员变量?
如果我们不考虑父类,我们可以先进行静态初始化,然后进行非静态初始化。
静态初始化包括静态成员变量和静态块的初始化。实际上,静态块在编译期间是集中的。
非静态初始化包括非静态成员变量初始化、非静态块和构造方法,编译后集中在构造方法中。
如果没有相互通话,那就非常简单了。首先,静态初始化。如果在静态初始化过程中调用了后者呢?!你可以编写一个代码来测试它:
输出:
你可以先看到它确实是静态初始化,但是中间有对构造方法的调用。
虽然编译器不报告错误,但此调用实际上是有风险的。
由于静态成员变量(如果已设置)在初始化之前调用类构造函数(假设存在依赖关系),因此该过程实际上是不可控制的。
看看这个例子:你能想象这种输出吗?
因此,如果必须在静态初始化过程中调用此类的构造函数。
一定要注意初始化顺序,准确到语句。
的静态成员变量为什么一定要初始化?
我们知道C类的静态成员变量需要初始化,但是为什么要初始化它们呢。实际上,“静态成员变量需要初始化”这句话有一些问题。应该说“静态成员变量需要定义”是准确的,而不是初始化。两者的区别在于初始化是分配一个初始值,而定义是分配内存。静态成员变量只在类中声明,而没有定义,因此在类外定义它们实际上是为静态成员变量分配内存。
静态变量什么时候初始化 静态变量默认初值 静态局部变量初始值
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。