c++程序编译过程

本文详细介绍了C++程序从源文件到可执行文件的编译过程,包括预编译、编译、汇编和链接四个阶段。预编译处理#include和#define,编译阶段将源代码转换为中间代码或汇编代码并进行优化,汇编阶段生成目标文件,链接阶段整合所有目标文件和库文件生成可执行文件。同时,文章提到了静态链接和动态链接的区别及其优缺点。
摘要由CSDN通过智能技术生成

过程

c++程序生成可执行文件的过程:源文件(.cpp),经过预编译,生成编译单元;编译单元,经过编译、汇编,生成目标文件(obj);程序内所有目标文件,经过链接,生成可执行文件。

预编译: 对#include #define进行文本替换,一个cpp文件(.c)文件与它相应的.h文件共同组成了一个编译单元。
编译: 在确认所有指令符合语法规则之后,将一个编译单元内文本形式的源代码翻译为等价的中间代码或者汇编代码。
还要经过优化,包括对中间代码的优化还有针对目标代码的生成进行的优化。
汇编: 将汇编语言代码翻译成目标机器指令的过程,生成目标文件。目标文件主要包含代码段(可读可执行)与数据段(可读可写可执行)。
链接: 将obj文件、操作系统的启动代码还有用到的库文件进行组织,形成最终可执行代码的过程。分为静态链接、动态链接。
静态链接: 将代码从静态链接库中拷贝到最终的可执行程序中。静态链接库实际上是一个目标文件的集合。
动态链接:不进行拷贝,只在最终的可执行程序中记录下动态链接库或者共享对象的名字以及其他少量的登记信息。在执行时,动态链接库中的内容被映射到运行时进程的虚地址空间,根据登记信息找到对应的函数代码。
动态链接使得最终的可执行文件比较短小,并且共享对象被多个进程使用时能够节约内存。但也有可能带来一些性能上的损失。

错误类型:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值