程序员的自我修养——链接,装载与库(八)运行库

  • 运行库是程序运行时所需要的库文件。 
  • 操作系统装载程序以后,首先运行的不是main函数,而是入口函数(往往是运行库的一部分)。
  • Linux下程序的运行步骤由4部分构成:
  1. 操作系统在创建进程后,把控制权交到了程序的入口,这个入口往往是运行库的某个函数。
  2. 入口函数对运行库和程序运行环境进行初始化,包括堆栈,堆,I/O,线程,全局变量构造。
  3. 入口函数在完成初始化之后,调用main函数,正式开始执行程序主体部分。
  4. main函数执行完毕后,返回到入口函数,入口函数进行清理工作,包括全局变量析构,堆销毁,关闭I/O等,然后进行系统调用结束进程。
  • Windows下程序的运行步骤:
  1. 初始化和OS有关的全局变量。
  2. 初始化堆。
  3. 获取命令行参数和环境变量。
  4. 初始化C库的数据。
  5. 调用mian函数并记录返回值。
  6. 检查错误并将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语言的运行库一般包括一下功能:
  1. 启动和退出:包括入口函数及入口函数所依赖的其他函数等。
  2. 标准函数:有C语言标准规定的C语言标准库所拥有的函数实现。
  3. I/O:I/O功能的封装和实现。
  4. 堆:堆的封装和实现。
  5. 语言实现:语言中一些特殊功能的实现。
  6. 调式:实现调式功能的代码。​​​​​​​​​​​​​​​​​​​​​ 

你可能感兴趣的:(程序员的自我修养——链接,装载与库)