也是个人意见:
对于你所说的:"程序存储在Flash中"和"程序从磁盘加载到RAM中" 这两种情况其实和编译器无必然的关系. 只不过对于"加载到RAM中执行",由操作系统增加了个"将程序(或者说可执行文件更好?)加载到RAM"的动作而已,没有被加载前,它只是一个"文件"而已,加载到内存并且获得控制权后,它才是一个"程序".而一旦加载完成,就和"程序在FLASH"没什么两样了(当然FLASH和RAM还是有一些区别的,但不关我们现在讨论的主题). 我且认为你所的"程序在FLASH"真的是指的"程序",而不是"程序文件". "程序":在系统上电后,能立刻获得控制权,并且运行. "程序文件",存储在某个存储介质上(比如磁盘,比如FLASH),需要经过某个步骤(或经过操作系统,或根本就是你自己编的一段加载程序)加载到系统内存,然后获得控制权,并开始运行后,它才变成"程序".
另:对于MCU之类的程序存储在Flash中的, 全局变量和局部变量都要有初使化代码(LZ的程序动作) 对于PC之类的,程序从磁盘加载到RAM中的,全局变量的初使化值就在EXE文件中(LZ的编译器动作) 如果C51中有如下语句: code int gobal_val = 0x55; 是不是也可以认为"初始化值"在EXE文件(FLASH)中? |