写在前面:
这本书是在微博上经由别人介绍的,到手后简单的翻了几页,发现内容确实和程序员的工作比较贴近,去除了繁冗复杂的无关程序的技术,让作为程序员的我更有兴趣去研读。
第一章
1.编译过程
编译过程可以分为预处理,编译,汇编,链接四个过程。比如当我们在shell中输入gcc -o hello hello.c 命令时,首先对#include ...等进行预处理,插入到程序文本中,最终生成后缀名为.i的文本文件;其次编译器将该文本文件翻译成hello.s,同样时文本文件,但其中包含汇编语言程序;再然后汇编器将hello.s翻译成机器语言指令,得到二进制文件hello.o;最后链接器将相关的.o文件(比如程序中用到了printf就会链接printf.o)合并到最终的hello文件中,这个文件是一个可执行文件了,可以加载到内存中,由系统执行。
2.计算机体系图
备注:
(1) cpu与外界交互主要在寄存器文件,ALU(运算单元)和内存之间进行,寄存器文件是由多个1字长的寄存器组成,每个寄存器都有名字(例:esp(指向栈顶的指针),ebp(指向栈尾的指针))。
(2) 32位机器1字长=32位=4Byte
64位机器1字长=64bit=8Byte
3.进程虚拟地址空间
备注:(1) 地址是从下到上增大。
(2) 栈和堆都是动态变化的。
4.时钟周期
cpu时钟周期(单位:ns),公式=1/频率*10的9次方,比如主频为2GHz的cpu,其时钟周期为1/(2*1000*1000000)*10的9次方=0.5ns
内存时钟周期计算方式不太一样,因为不太确定,所以就不把公式写在这里了。
ps:错误之处,望请斧正!