C 语言的编译链接过程

C 语言的编译链接过程:

1.可执行文件&不可执行文件

可执行文件: 在 windows 操作系统中,扩展名为: *.exe , *.bat, *com 等的文件是可执行文件;

可执行文件由指令和数据构成。Linux 是靠文件属性来判断判断是否可执行。

不可执行文件:其内容是由数据构成。

举例: 在 C/C++语言中 .c / .cpp 源文件(文本), .h 头文件(文本),.i 预编译文件(文本),.s 汇编文件,.o / .obj 二进制目标文件,.exe 可执行文件 。

2.预编译&编译&链接

嘿嘿嘿

3.可见性(作用域)与生存期(生命期)

作用域(可见性)
指标识符能够被使用的范围:只有在作用域内标识符才可以被使用。
此阶段针对编译和链接过程。

  1. 函数中定义的标识符,包括形参和函数体中定义的局部变量,作用域都在该函数内,也称作函数域。
  2. 文件作用域也称全局作用域。定义在所有函数之外的标识符,具有文件作用域,作用域为从定义处到整个源文件结束。文件中定义的全局变量和函数都具有文件作用域。
    ·

生存期(生命期)(Life time)
生命期指的是标识符从程序开始运行时被创建,具有存储空间,到程序运行结束时消亡,释放存储空间的时间段
此阶段针对的是程序的执行过程

!!!如果程序没有编译成功,就不要谈论他的生存期,没有意义!!!

  1. 局部变量(在函数当中定义的变量)的生存期是: 函数被调用时才给局部变量分配存储空间,到函数执行结束,存储空间释放。存储栈区(.stack 区)。
    ·
    特殊:当在函数中定义一个静态变量(局部静态变量)时,这时变量存放在数据区,并且程序运行时就会给变量分配存储空间(不论运行还是不运行这个函数),当执行这个函数时,具体的数据就会加载进存储空间,当函数执行结束,也不会释放存储空间(静态局部变量生存期)。

  2. 全局变量的生存期是: 从程序运行前开始,到执行后结束。存储在数据区(.data 区)。

  3. 动态生命期是:标识符由特定的函数调用或运算来创建和释放,如调用 malloc()为变量分配存储空间,变量的生命期开始,而调用 free()释放空间或程序结束时,变量生命期结束。具有动态生命期的变量存储在堆区(.heap区)。

4.C语言四大区域

数据区(.data 区),栈区(.stack 区),堆区(.heap区),代码区

1.栈区(stack):由系统的编译器自动的释放,主要用来存放方法中的参数,一些临时的局部变量等,并且方法中的参数一般在操作完后,会由编译器自动的释放掉。

2.堆区(heap):由程序员决定,在Java中,如果程序员不释放的话,一般会由垃圾回收机制自动的清理掉。此区域主要用来存放我们经常创建的对象、动态的申请的临时空间等。

3.数据区(data seg):也称全局区或者静态区,根据名称我们就应该知道用来存放一些全局的东西,比如我们经常用到的静态变量、全局变量等都会存放到数据区,此区域上的东西都被全局所共享。比如我们可以采取类名.的方式就可以访问到方法,这就是所谓的静态方法,存放到数据区的。

4.代码区:存放程序编译后可以执行代码的地方。比如执行代码时写的While语句、if条件语句等,都会存放到此。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不踩井盖的小女孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值