c代码具体的执行过程

首先.c文件预编译成为.i文件(预编译文件),然后.i文件被编译成.obj文件,然后再经过链接(多个.c被链接,.h文件并不被链接),成为.exe文件(两部分,代码和数据:全局变量,静态变量等)储存在磁盘中

在这里插入图片描述

然后当这个.exe文件被执行时,cpu它中的代码被加载到内存中,(因为磁盘与cpu的运行速度相差太大,相差20万倍,内存和cpu相差200倍,cpu内的寄存器与cpu速度大致相同,寄存器与1级级缓冲区大概有4倍差距,与2级缓冲区大概有8倍差距,与3级缓冲区大概有10倍差距,和内存差200倍)

在这里插入图片描述
然后内存为它开辟四个空间,代码区,数据区,堆区,栈区。

代码以二进制形式存储在代码区,当执行到一个函数时,在栈区为这个函数申请栈帧(大概88字节),而函数中的形参变量等在这个栈帧中被分配空间,所以这个变量也被称为局部变量。栈区在函数执行完之后会被自动释放,而其中为变量所分配的空间也会被释放,所以它的生存期从函数开始到函数结束,
全局变量,静态变量等储存在数据区,数据区只有在程序全部执行完之后才会被释放,所以它们的生存期是程序开始到程序接受。当static修饰局部变量时,它只能在定义的该函数内使用。
我们可以malloc在堆中申请空间,这个空间需要程序员手动free释放。在一个函数中,执行一个函数,则会在调用函数的位置设置一个中断,让函数执行完之后返回到这里继续执行。而有返回值的函数,在执行完之后,则会通过寄存器,把这个值带回主函数中。
在window 中,栈的空间大概是1MB,在Linux中,栈的空间大概是10MB ,而堆的话大概是4G.
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值