黑马程序员技术交流社区

标题: C语言中的全局变量内存分配和初始化顺序 [打印本页]

作者: HSQI    时间: 2016-4-22 16:18
标题: C语言中的全局变量内存分配和初始化顺序

内存分配:

对于局部变量而言,内存分配的顺序和代码的顺序是一样的,但全局变量就不一定一样了。

1)一般的编译器,对于初始化的全局变量,碰到之后就知道这是一个定义,会马上分配空间,如

int ib =3;

int ia =4;

那么ia的地址就在ib之后


2)对于没有初始化的全局变量,因为不知道是定义还是声明,所以要在扫描完所有代码之后才能决定,这个时候编译器会读符号表,然后看哪些变量没有分配空间,因为符号表是字母顺序的,所以这些变量的内存分配也是按照字母顺序来的,所以对于

int ib;

int ia;

ia的空间在ib之前


初始化:

对于全局变量而言,除了在同一个文件定义的全局对象的初始化 是按照定义次序来进行的之外,其他全局或静态变量之间的初始化次序没有任何保障的。



作者: 烛风小糊涂    时间: 2016-4-23 23:50
本帖最后由 烛风小糊涂 于 2016-4-23 23:52 编辑

怎么我刚试的是:

局部变量中:先定义的分配高地址,后定义的分配低地址;
全局变量中:先定义的分配低地址,后定义的分配高地址;
和初始化没啥关系~?





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2