添加运行库

This commit is contained in:
huihut 2018-02-13 19:31:31 +08:00
parent db5822e11b
commit 36699b4f34

View File

@ -30,7 +30,7 @@
* extern"C"
* const作用
* 什么是面向对象OOP
* new和malloc的区别
* new、malloc、alloca的区别
* 运行时类型识别RTTI
* 友元类和友元函数
* struct和class的区别
@ -136,6 +136,65 @@
## 链接装载库
### 运行库Runtime Library
#### 典型程序运行步骤
1. 操作系统创建进程,把控制权交给程序的入口(往往是运行库中的某个入口函数)
2. 入口函数对运行库和程序运行环境进行初始化包括堆、I/O、线程、全局变量构造等等
3. 入口函数初始化后调用main函数正式开始执行程序主体部分。
4. main函数执行完毕后返回到入口函数进行清理工作包括全局变量析构、堆销毁、关闭I/O等然后进行系统调用结束进程。
> 一个程序的I/O指代程序与外界的交互包括文件、管程、网络、命令行、信号等。更广义地讲I/O指代操作系统理解为“文件”的事物。
#### glibc 入口
`_start -> __libc_start_main -> exit -> _exit`
其中`main(argc, argv, __environ)`函数在`__libc_start_main`里执行。
#### MSVC CRT 入口
`int mainCRTStartup(void)`
执行如下操作:
1. 初始化和OS版本有关的全局变量。
2. 初始化堆。
3. 初始化I/O。
4. 获取命令行参数和环境变量。
5. 初始化C库的一些数据。
6. 调用main并记录返回值。
7. 检查错误并将main的返回值返回。
#### C语言运行库CRT
一个C语言运行库大致包含如下功能
* 启动与退出:包括入口函数及入口函数所依赖的其他函数等。
* 标准函数有C语言标准规定的C语言标准库所拥有的函数实现。
* I/OI/O功能的封装和实现。
* 堆:堆的封装和实现。
* 语言实现:语言中一些特殊功能的实现。
* 调试:实现调试功能的代码。
#### C语言标准库ANSI 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
## 海量数据处理
* [ 海量数据处理面试题集锦](http://blog.csdn.net/v_july_v/article/details/6685962)