|
发表于 2009-3-7 10:04:27
|
显示全部楼层
感谢,学习了。
看到六楼yyccaa 引的C99关于不同类型的变量初始化的要求。(自动变量如果没有人为的初始化,则数据不确定。其他的类型变量(全局、静态)如果没有初始化,C语言要求编译器按照不同的变量类型(指针,数据,结构体,联合体)对变量进行不同方式的赋零处理)再结合楼上的解释。
是不是可以这样理解。
基本计算机系统对存储器要求分为ROM,RAM。而RAM又可以分为RW和ZI两个段(暂时按照编译器起的名字叫)
编译器要做的工作就是按照C语言的规定(该清零的清零-主要针对非局部变量又没有赋值的情况,该不管的不管-主要针对局部变量),结
合计算机系统存储器的实际情况(一般都有RO,RW,ZI),把不同的变量放到不同的段内(RW,ZI)。生成一个编译后的文件。
而编译后的文件,通过linker,结合计算机系统(一定情况下可以理解成不同处理器),把RW,ZI(当然还有RO)放到属于这些段的实际存储
器区域中。
不知道这种理解对不对?感谢赐教
一直用51,没有接触过ZI这个概念(呵呵,对计算机系统的基本组成不熟悉),51里面无论全局变量还是局部变量,最后在map文件里看都
是只有data,idata,xdata之类的区别,只是按照存储器的物理范围来分的,没有具体表示出变量到底应该属于那个段。只是最后加了一个
RELOCATION属性,全局变量都是不能重新分配的,局部变量都是可以重新分配的(如果寄存器可以解决问题,就看不到局部变量了)。
这是不是因为51资源太有限,就不按常理出牌了,呵呵
aaa1982 |
|