【C语言复习(二十六)】各个目标文件的关系

        程序中通常会有大量的函数调用,这些被调用的函数只要有声明(而不需要定义实现),编译器就可以成功处理。在生成可执行文件的过程中,连接器将各个可执行程序的代码段组合到一起,而有函数调用的地方还需要找到真正的函数定义才可以完成连接。因此,函数的定义和调用者可以在一个代码段内,也可以在不同的代码段内。连接器会根据需要根据实际的情况修改编译器生成的机器代码,完成正确的跳转。

函数跳转的连接过程如图:


        与函数跳转类似的是全局变量的访问,在C语言编译的过程中,程序可以访问用extern声明的外部全局变量,在连接的过程中,连接器需要找到实际变量在数据段中的位置,完成正确的变量访问。

程序中全局变量的连接如图所示。


        对于可执行文件的生成,其主要的工作是组合各个目标文件中的三个段。还将包含一些其他的过程。首先,所有的可执行程序都需要指定一个入口,在C语言中入口即main函数,在一个C语言的应用程序各个源文件中,只能包含一个main函数。其次,不同系统所使用的可执行程序可能包含不同的头信息,头信息是在主要段之外附加的信息,可以供操作系统加载可执行程序的时候使用。

        知识点:在连接过程之前,各个源文件生成目标文件相互没有关系。在连接之后,各目标文件函数和变量可以相互调用和访问,从而被联系在一起。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值