-
运行库是程序运行时所需要的库文件。
- 操作系统装载程序以后,首先运行的不是main函数,而是入口函数(往往是运行库的一部分)。
- Linux下程序的运行步骤由4部分构成:
- 操作系统在创建进程后,把控制权交到了程序的入口,这个入口往往是运行库的某个函数。
- 入口函数对运行库和程序运行环境进行初始化,包括堆栈,堆,I/O,线程,全局变量构造。
- 入口函数在完成初始化之后,调用main函数,正式开始执行程序主体部分。
- main函数执行完毕后,返回到入口函数,入口函数进行清理工作,包括全局变量析构,堆销毁,关闭I/O等,然后进行系统调用结束进程。
- 初始化和OS有关的全局变量。
- 初始化堆。
- 获取命令行参数和环境变量。
- 初始化C库的数据。
- 调用mian函数并记录返回值。
- 检查错误并将main的返回值返回。
- 环境变量是存在于系统中的一些公用数据,任何程序都可以访问。通常来说,环境变量存储的都是一些系统的公共信息。
- glibc的程序入口为_start。
- .init段:main函数调用前的初始化工作。 .fini:main函数后的收尾工作。
- 程序正常结束有两种情况:一种是main函数的正常返回,一种是程序的中使用exit退出。
- malloc可以在堆上分配内存空间。alloca可以在栈上分配内存空间,并在函数返回时自动释放,比如局部变量。
- I/O的全称为Input/Output,即输入输出,I/O代表了计算机与外界的交互,交互的对象可以是人或者其他对象。
- 程序的I/O指代了程序与为界的交互,包括文件,管带,网络,命令行,信号等。
- I/O初始化函数需要在用户空间中建立stdin,stdout,stderr及其对应的FILE(linux下称为文件描述符,windows称为文件句柄。一般为指针)结构,使得程序进入main函数之后可以直接使用printf,scanf等函数。
- C语言的运行库一般包括一下功能:
- 启动和退出:包括入口函数及入口函数所依赖的其他函数等。
- 标准函数:有C语言标准规定的C语言标准库所拥有的函数实现。
- I/O:I/O功能的封装和实现。
- 堆:堆的封装和实现。
- 语言实现:语言中一些特殊功能的实现。
-
调式:实现调式功能的代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)