重要内容大纲
1.1 C程序实现过程
一个由用户编写的“hello world”源代码到可以在屏幕上看见可执行文件经过一下过程:
C语言翻译的阶段介绍
1.预处理cpp:头文件展开、宏定义替换
将 .c 文件(源程序)变成 .i 文件(修改过的源程序)
2.编译阶段ccl:源代码变成汇编语言
将 .i 文件变成 .s 文件
3.汇编阶段as:汇编语言转机器语言
将 .s 文件变成 .o 文件(可重定位目标程序)
简单说,可重定位目标程序就是看不见源代码的,链接以后能运行起来的程序。所以可重定位就是复制到其他地方,让其他的用户链接可执行但是不能看源代码的玩意
4.链接阶段ld:机器语言的文件“打包合并”变成可执行文件
1.2 高速缓存cache
1.访问速度越快的设备越贵
2.内存越大的设备访问速度越慢
目前的CPU中的寄存器跟内存的速度天壤之别,为了使得计算机快速高效,在之间加入了高速缓存以达到访问速度加快的目的。
1.3操作系统的抽象决策
应用程序不与硬件直接交互,中间有一层操作系统对下管理操作,对上反馈目的。那么对下的管理则尤为重要,为了使得在不同的硬件上都可以执行,固操作系统对硬件进行抽象,使他们被方便管理。
1.4重要主题
1.4.1 Amdahl原理
原理解释:优化一个东西,其效果取决于优化的部分对整体的重要程度和优化效率
S:整体的效率提升
k:可优化部分的优化效率
:可优化部分对整体的占比
1.4.2 计算机优化决策 -- 并行与并发
1)线程级并发(针对进程而言)
多核:多个CPU干事情
超线程:一个CPU干几件事情
多核 * 超线程
2)指令级并发(针对处理器)
一个处理器的流水线执行处理,优化时间
3)单指令、多数据并行(针对指令)
多用于处理视频和图像