- 导师给了一个书籍清单,其中<<程序员的自我修养>>这本书旁边写了个
必修
,想来是非常重要的书籍了,所以,我决定花时间啃完这本书,并且把重要的内容做成笔记,分享到csdn - 阅读该书需要的前置知识
- 操作系统
- 计算机组成原理
- linux,我之前有发布过linux文章,把那个文章看完即可
- c++/c
需要提前知道的一些小知识点
- 北桥芯片(North birdge/PCI bridge) : 随着图形化操作系统的普及,游戏是3d游戏和多媒体的发展,慢速的i/o总线以及无法满足图形设备的巨大需求,为了协调cpu,内存和高速的图形设备,人们专门设计了一个高速的北桥芯片,以便他们之间可以高速的交换数据
- 南桥芯片(South birdge/ISA birdge) : 北桥连接高速设备,如果这个时候再把低速设备连接到北桥芯片就会拖累速度,所以我们将鼠标键盘等低速设备连接到南桥芯片,然后南桥芯片再连接到北桥上
- 对称多核处理器(SMP,symmetrical Multi-Processing) : 就是各个CPU在系统中所处的地位和所发挥的功能都是一样的,但是比较昂贵和奢侈,并且只适用于问题可以比较简单分解的情况,所以在商用服务器和需要大量计算的环境
- 多核心处理器(multi-core Processing) : 其实就是SMP的简化版,逻辑上看来两者是一样的,只是各个处理器共享比较昂贵的缓存等部件,只保留多个核心,并且以一个处理器的外包装打包发售
- 推荐阅读https://www.cnblogs.com/bombe1013/p/3294307.html
- 之前学习硬盘,我们都只有硬盘由多个盘片,每个盘片的两个盘面都可以存储数据,一个盘面又会划分多个磁道,每个磁道又划分为若干个扇区,这就是硬盘的划分方式,每个扇区一般为512字节,但是存在一个问题,就是每个磁道的周长是不一样的,如果每个磁道有相同的扇区数,你们最内侧磁道数据肯定越密集,越外侧越稀疏,会造成浪费,但是如果每个磁道扇区数目还不一样的话,也会造成计算困难,所以现在为了屏蔽这些复杂的硬件细节,推出了LBA方式,整个硬盘的所有扇区从0开始计数,叫做逻辑扇区号,待真正需要用到的时候,在通过一定的方式转换为实际的(盘面号,柱面号,扇区号)
- 源代码变成可执行文件需要四步
- 预编译(compile)
gcc -E hello.cpp -o hello.ii
,如果是.c文件,生产的预编译文件的后缀应该是.i,预编译的特点是,主要处理#有关的内容,比如- #include,将被包含的文件插入到预编译指令的位置
- #define,将宏常量展开,也就是代码中用到宏常量的地方,全部用值替代
- 删除所有注释
- 保留@pragma
- 编译
gcc -S hello.cpp -o hello.s
,生成汇编代码文件,里面的都是汇编语言- 词法分析
- 语法分析
- 语义分析
- 优化
- 汇编(assembly)
gcc -c hello.cpp -o hello.o
,将生成目标文件,文件内的内容是机器可以直接执行的,这个过程比较简单,只需要对照机器语言-汇编语言对照表,一一翻译即可 - 链接生成可执行文件
.out
- 预编译(compile)