默认环境为Linux环境,不考虑多进程环境!
程序的执行过程
C程序的入口函数是main()?
程序的入口函数是main函数,是由装载器决定的!以 Linux ELF可执行文件为例,在编译程序时,编译器会为程序链接装载器,程序执行时会首先调用装载器,加载程序到内存,随后调用main函数!在嵌入式系统中(无操作系统),入口函数是由引导程序(汇编文件)决定的,这个汇编文件实现和Linux装载器类似的功能。例如使用Keil 开发STM32程序时,会选择一个. S的库文件,在这个文件中,初始化完中断向量之后会引导执行第一个C函数——main函数,如果汇编文件中的函数名不是 main,相应的入口函数也就不是main了。
程序文件的组成
由于操作系统的存在,不考虑内核占用的内存空间,我们可以认为应用程序独占所有内存空间。在内存中,程序可简要划分为,代码段,数据段,已初始化全局变量段,未初始化全局变量段(BSS段)。堆和栈处在中间,向相反方向增长。
代码段为C程序对应的机器指令,数据段为程序内的数据(常量),已初始化全局变量为程序内初始化的全局变量,未初始化全局变量在内存中分配空间,并初始化为零。BSS段不占用磁盘空间,只存在描述这些全局变量的表。执行函数时,局部变量使用栈空间,自动分配内存。malloc函数则使用堆空间的内存,需要由程序员自己管理,确保内存的正确分配与释放。
C语言,程序的构成
最新推荐文章于 2024-07-07 12:11:50 发布