程序员的自我修养 学习笔记(5)

运行库

     程序的入口点,实际上是一个程序的初始化和结束部分,往往是运行库的一部分。典型的程序运行步骤大致如下:

    1. 操作系统在创建进程后,把控制权交给了程序入口,此入口通常为运行库中的某个入口函数

   2. 入口函数堆运行库和程序运行环境进行初始化,包括堆栈、I/O、线程、全局变量构造等等

   3. 完成初始化后,调用main函数,正式开始执行程序的主体部分。

   4. main函数执行完毕后,返回到入口函数,入口函数进行后续的清理工作,包括全局变量析构、堆销毁、关闭I/O,然后进行系统调用结束进程。

   glibc程序的入口地址为_start,这个入口有ld连接器默认的链接脚本所指定。

C语言标准库,ANSI C的标准库由24个C头文件组成,仅仅包含了数学函数、字符/字符串处理、I/O等基本方面。例如

       标志输入输出 文件操作 stdio.h

       字符操作 ctype.h

       字符串操作 string.h

       数学函数     math.h

      资源管理/格式转化   stdlib.h

      时间/日期   time.h

     断言   assert.h

     各种类型上的常数   limits.h  float.h

      

glibc库:glibc库,即GNU C Library,是GNU旗下的C标准库,最初由自由软件基金会发起开发,目的是为GNU操作系统开发一个C标准库。glibc的发布版本主要由两部分组成,一部分是头文件,比如stdio.h,stdlib.h等等,往往位于/usr/include、另一部分,则是库的二进制文件部分,就是C语言的标准库,它有静态和动态两个版本。动态库为/lib/libc.so.6(即为第六个libc版本),静态库为/usr/lib/libc.a

glibc的启动文件,有.init 和 .finit段,这两个段中的代码,最终会被拼成两个函数_init()和_finit(),这两个函数会先于/后于/main函数执行。

Windows系统是完全基于DLL机制的,它通过DLL对系统调用进行了包装,进行了所谓了Windows API。

image

原文地址:https://www.cnblogs.com/cherishui/p/3793719.html