C++全局变量内存分配和初始化顺序
1.局部变量规则
局部变量是在栈空间上,内存分配的顺序和代码的顺序是一致的
2.全局变量规则
2.1 初始化的全局变量
一般来说,对于初始化的全局变量,编译器遇到之后知道这是一个定义,会马上分配空间,例如:
int ib = 10;
int ia = 10;
这个分配的结果是:ia的地址在ib后面
2.2 未初始化的全局变量
对于未初始化的全局变量,编译器遇到之后不知道是声明还是定义,所以要在扫描完所有代码之后才能决定,这个时候编译器会读符号表,然后看哪些变量没有分配空间,因为符号表是字母顺序的,所以这些变量的内存分配也是按照字母顺序来的,例如:
int ib;
int ia;
这个分配的结果是:ia的地址在ib前面
3.多文件全局变量规则
对于全局变量而言,除了在同一个文件定义的全局对象的初始化,是按照定义次序来进行的之外,其他全局或静态变量之间的初始化次序没有任何保障的。
本文详细解析了C++中全局变量与局部变量在内存分配及初始化过程中的规律。介绍了局部变量遵循代码顺序分配内存的特点;针对全局变量,阐述了初始化与未初始化变量的不同分配逻辑及其按字母顺序排列的现象,并探讨了多文件环境中全局变量初始化的不确定性。
5547

被折叠的 条评论
为什么被折叠?



