C++全局变量内存分配和初始化顺序
1.局部变量规则
局部变量是在栈空间上,内存分配的顺序和代码的顺序是一致的
2.全局变量规则
2.1 初始化的全局变量
一般来说,对于初始化的全局变量,编译器遇到之后知道这是一个定义,会马上分配空间,例如:
int ib = 10;
int ia = 10;
这个分配的结果是:ia的地址在ib后面
2.2 未初始化的全局变量
对于未初始化的全局变量,编译器遇到之后不知道是声明还是定义,所以要在扫描完所有代码之后才能决定,这个时候编译器会读符号表,然后看哪些变量没有分配空间,因为符号表是字母顺序的,所以这些变量的内存分配也是按照字母顺序来的,例如:
int ib;
int ia;
这个分配的结果是:ia的地址在ib前面
3.多文件全局变量规则
对于全局变量而言,除了在同一个文件定义的全局对象的初始化,是按照定义次序来进行的之外,其他全局或静态变量之间的初始化次序没有任何保障的。