13.4.4 C语言程序的运行总结
在上面几节,主要介绍了C语言运行时内存的使用情况。其关注点是程序中主要的段,事实上,程序可能不仅包括了上述主要段,还可能包括一些头信息。程序实际的运行也分为在操作系统下运行和直接运行等情况。在具有操作系统的情况下,程序由操作系统加载运行,加载的时候可执行程序可以是一个文件,这个文件将包含程序的主要段以及头信息。
对于Linux操作系统,目标程序是可执行的ELF(Executable and linking Format)格式;对于uCLinux操作系统,目标程序是Flat格式;对于需要在系统直接运行的程序,目标程序应该是纯粹的二进制代码,载入系统后,直接转到代码区地址执行。
事实上,无论运行环境如何,C语言程序在运行时所进行的动作都是类似的。程序在准备开始运行的时候,以下几个条件都是必不可少的:
1.代码段必须位于可运行的存储区。
2.读写数据段必须在可以读写的内存中,而且必须经过初始化。
3.未初始化数据段必须在可以读写的内存中开辟,并被清空。
对于第1点,代码段如果位于可以运行的存储区域中(例如Nor Flash或者RAM),它就不需要加载,可以直接运行;如果代码段位于不能运行的存储区域中(例如:Nand Flash或者硬盘)中,它就必须被加载到RAM运行。