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