根据 C 语言标准规范,所有全局变量和静态变量都必须初始化为 0。这是以上所有 CRT 都需要的常用功能。此外,还会调用另一个例程:_crtinit
。_crtinit
例程用于对程序的 .bss
部分中的存储器进行初始化。_crtinit
例程也是用于调用 main 过程的封装文件。调用 main 过程前,它可能调用其他初始化函数。_crtinit
例程由如下所述启动文件来提供。
- crtinit.o
-
这是默认第二阶段 C 语言启动文件,用于执行以下步骤:
- 将
.bss
部分清零。 - 调用
_program_init
。 - 调用构造函数 (
_init
)。 - 为 main 设置实参,并调用 main。
- 调用析构函数 (
_fini
)。 - 调用
_program_clean
并返回。
- 将
- pgcrtinit.o
-
这是剖析期间使用的第二阶段启动文件,用于执行以下步骤:
- 将
.bss
部分清零。 - 调用
_program_init
。 - 调用
_profile_init
以初始化剖析库。 - 调用构造函数 (
_init
)。 - 为 main 设置实参,并调用 main。
- 调用析构函数 (
_fini
)。 - 调用
_profile_clean
以清理剖析库。 - 调用
_program_clean
,然后返回。
- 将
- sim-crtinit.o
-
这是在编译器中使用
-mno-clearbss
开关时,所使用的第二阶段启动文件,用于执行以下步骤:- 调用
_program_init
。 - 调用构造函数 (
_init
)。 - 为 main 设置实参,并调用 main。
- 调用析构函数 (
_fini
)。 - 调用
_program_clean
,然后返回。
- 调用
- sim-pgcrtinit.o
-
这是剖析期间搭配
-mno-clearbss
开关一起使用的第二阶段启动文件,用于按如下顺序执行下列步骤:- 调用
_program_init
。 - 调用
_profile_init
以初始化剖析库。 - 调用构造函数 (
_init
)。 - 为 main 设置实参,并调用 main。
- 调用析构函数 (
_fini
)。 - 调用
_profile_clean
以清理剖析库。 - 调用
_program_clean
,然后返回。
- 调用