C语言,程序的构成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值