目录
运行时期(Runtime)是指程序实际执行的时间段,它不仅限于 main 函数的执行,还包括程序启动之前和 main 函数执行完毕之后的操作系统和运行环境所做的准备工作和清理工作。
运行时期的几个关键阶段
-
程序加载(Program Loading)
在程序启动之前,操作系统会加载可执行文件到内存中,并分配必要的资源。这包括:
- 内存分配:为程序分配足够的内存空间。
- 段加载:将可执行文件中的各个段(如文本段、数据段等)加载到内存中。
- 重定位(Relocation):确保程序中的符号引用正确地映射到内存地址。
-
初始化(Initialization)
在
main函数执行之前,操作系统和运行环境还会进行一些初始化工作,包括:- 全局构造函数执行:如果有全局构造函数(C++ 中的
static对象构造函数),它们会在main函数之前执行。 - 动态库加载:如果程序依赖于动态库,操作系统会在
main函数执行之前加载这些库,并解析所需的符号。
- 全局构造函数执行:如果有全局构造函数(C++ 中的
-
main函数执行main函数是程序的入口点,通常在这个函数中会执行程序的核心逻辑。main函数的执行包括:- 初始化硬件和资源:初始化硬件设备、分配资源等。
- 业务逻辑:执行程序的核心功能。
- 异常处理:处理程序运行过程中可能出现的异常情况。
-
清理工作(Cleanup)
在
main函数执行完毕后,操作系统和运行环境还会进行一些清理工作,包括:- 全局析构函数执行:如果有全局析构函数(C++ 中的
static对象析构函数),它们会在main函数之后执行。 - 资源释放:释放程序占用的资源,如关闭文件、释放内存等。
- 退出处理:操作系统会处理程序的退出,包括清理临时文件、释放内存页等。
- 全局析构函数执行:如果有全局析构函数(C++ 中的
示例说明
假设你有一个简单的 C 语言程序:
c
深色版本
#include <stdio.h>
// 全局构造函数(C++ 中)
void init() {
printf("Initializing...\n");
}
// 全局析构函数(C++ 中)
void cleanup() {
printf("Cleaning up...\n");
}
int main() {
printf("Hello, World!\n");
return 0;
}
在 C++ 中,可以通过静态构造函数和析构函数来实现类似的功能:
cpp
深色版本
#include <iostream>
class GlobalInit {
public:
static void init() {
std::cout << "Initializing..." << std::endl;
}
static void cleanup() {
std::cout << "Cleaning up..." << std::endl;
}
};
int main() {
GlobalInit::init(); // 手动调用全局构造函数
std::cout << "Hello, World!" << std::endl;
GlobalInit::cleanup(); // 手动调用全局析构函数
return 0;
}
总结
运行时期(Runtime)涵盖了程序从启动到结束的整个时间段,包括但不限于 main 函数的执行。具体来说,运行时期包括以下几个关键阶段:
- 加载阶段:操作系统加载可执行文件到内存中,并进行必要的重定位。
- 初始化阶段:执行全局构造函数和动态库加载等初始化工作。
main函数执行阶段:执行程序的核心逻辑。- 清理阶段:执行全局析构函数和资源释放等清理工作。

7318

被折叠的 条评论
为什么被折叠?



