入口函数/入口点 程序的入口点实际上是一个程序的初始化和结束部分,它往往是运行库的一部分。 一个典型的程序运行步骤大概如下:
操作系统在创建进程之后,把控制权交给程序的入口,这个入口往往是运行库中某个入口函数入口函数堆运行库和程序运行环境进行初始化,包括堆、I/O、线程、全局变量构造等等入口函数在完成初始化之后,调用main函数,正式开始执行程序主体部分glibc的程序入口为_start,它由汇编实现,并且和平台相关。 它里面有: init unint rtld_fini //这里是和动态加载有关的收尾工作
默认入口函数名为:mainCRTStartup。它的大概流程是:
初始化和OS版本有关的全局变量初始化堆==》这里会调用HeapCrete创建默认堆初始化I/O获取命令行参数和环境变量初始化C库的一些程序调用main并记录返回值检查错误并将main的返回值返回一个C语言运行库大致包括:
启动与退出 ==》 包括入口函数及入口函数所依赖的其他函数标准函数 ==》 由C语言标准规定的C语言标准库所拥有的函数实现I/O ==》 I/O功能的封装和实现堆 ==》 堆的封装和实现语言实现 ==》 语言中的一些特殊功能的实现调试 ==》 实现调试功能的代码C语言标准库 :
标准输入输出 stdio.h文件操作 stdio.h字符操作 ctype.h字符串操作 string.h数学函数 math.h资源管理 stdlib.h格式转换 stdlib.h时间/日期 time.h断言 assert.h各种类型上的常数 limits.h float.h变长参数 stdarg.h非局部跳转 setjmp.h