程序在 编译期,链接期, 运行期各执行哪些操作?

本文探讨了程序在编译期、链接期和运行期的不同阶段所执行的操作。在编译期,源代码被转换为机器语言;链接期,编译后的对象文件合并成可执行文件;运行期,程序加载到内存中并开始执行。重点讨论了不同阶段与存储、删除及语言特性的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

源文件的编译过程包含两个主要 阶段,而它们之间的转换是自动的
先说说要实现一个程序功能要经历的步骤吧  
step1:当然就是在编辑窗口(用高级语言)输入你的原程序  (f.c)
step2:编译你的原程序  编译成计算机能够识别的2进制形式的目标代码(f.o)
step3:将上面的目标代码 输入内存与系统提供的库函数和其他一些目标代码相连接 连接成可以执行的exe文件 f.exe
step4:再将可以执行的exe文件调入内存运行
 
第一个阶段是预处理阶段在正式的编译阶段之前进行。预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容。#include指令就是一个预处理指令,它把头文件的内容添加到.cpp文件中还有其他许多预处理指令
这个 在编译之前修改源文件的方式提供了很大的灵活性,以适应不同的计算机 和操作系统环境的限制。一个环境需要的代码跟另一个环境所需的代码可能有所不同,因为可用的硬件或操作系统是不同的。在许多情况下,可以把用于不同环境的代码放在同一个文件中,再在预处理阶段修改代码,使之适应当前的环境。预处理器显示为一个独立的操作,但一般不能独立于编译器来执行这个操作。调用编译器会自动执行预处理过程,之后才编译代码。编译器为给定源文件输出的是机器码,执行这个过程需要较长时间。
### 编译期运行期的概念 编译期是指程序被转换成机器码的过程,在此间,源代码通过一系列复杂的变换最终成为计算机可以直接执行的形式。对于像C++这样的静态类型语言来说,许多特性如模板实例化、函数重载解析都在这一阶段完成,这些都属于编译期多态的一部分[^1]。 与此相对的是运行期,指的是程序实际被执行的时间段。在此过程中发生的事件包括但不限于内存分配、I/O操作以及动态链接库加载等。特别是在支持面向对象特性的编程环境中,诸如虚函数调用之类的机制会在运行时决定具体要执行哪一个实现版本,这就是所谓的运行期多态。 ### 特点对比 #### 编译期特点: - **提前验证**:所有的语法错误可以在编译时被捕获并报告给开发者; - **性能优势**:由于大部分的工作已经在编译前完成了,所以生成的目标文件往往具有较高的效率; - **静态分析**:允许工具对代码进行深入的静态分析,从而发现潜在的问题或优化机会; - **多态形式**:主要体现为基于模板的具现化和函数重载解析等形式,这类多态性是在编译时刻就已经确定下来的,因此被称为编译期多态或静态多态。 #### 运行期特点: - **灵活性更高**:可以适应更多的不确定性和变化条件,比如通过反射机制来获取类的信息或是修改行为; - **成本较高**:某些情况下可能会引入额外开销,例如虚拟表查找带来的间接寻址延迟等问题; - **动态交互性强**:能够更好地与其他进程和服务互动,尤其是在分布式系统中显得尤为重要; - **多态形式**:涉及继承体系内的方法覆盖(override),即子类提供父类抽象方法的具体实现方式,这种类型的多态发生在程序运行的时候,故名曰运行期多态。 ```cpp // C++ 中定义一个基类及其派生类的例子展示编译期 vs 运行期多态 #include <iostream> class Base { public: virtual void show() const { std::cout << "Base class\n"; } // 虚函数用于运行期多态 }; class Derived : public Base { public: void show() const override { std::cout << "Derived class\n"; } template<typename T> void display(T value) const { // 模板函数用于编译期多态 std::cout << "Template function with argument of type " << typeid(value).name() << "\n"; } }; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值