mirror of
https://github.com/huihut/interview.git
synced 2024-03-22 13:10:48 +08:00
添加运行库
This commit is contained in:
parent
db5822e11b
commit
36699b4f34
61
README.md
61
README.md
|
@ -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/O:I/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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user