对《深刻理解计算机系统》(CSAPP)慕名已久,主要在于听说这本书尽可能的作到相对实用,不去讲那些和实际编程没多大关系的计算机原理(毕竟是著名计算 机院校里面最偏软件的CMU的做品),重点很是明确,像我这种没有本科科班出身又不想去死读些不知道之后有没有用的东西的人来讲,最是适合了。感兴趣的东西就能够再加深,不兴趣的就算了。程序员
书的确是可贵的书。我第一次试图读这本书是几个月之前,当时第2章“信息的表示和处理”没看完就放下了,以为讲了一大堆数字表达方式很没意思……此次 稍微坚持了一下,没想到就一口气读下来了…… 编程
重点推荐第3章“程序的机器级表示”、第5章“优化程序性能”、第6章“存储器层次结构”、第10章“虚拟存储器”。以为这四章乃是全书之精华,看得人欲罢不能。 缓存
“程序的机器级表示”一章几乎是一种教授逆向工程的方法在讲授,剖析编译器产生的汇编代码,以此来加深对具体代码实现的理解。大量的习题都是根据汇编 来猜源程序是什么,有趣极了。这一章还覆盖了缓冲区攻击——可是这点讲得太少了,不解渴,有时间本身弄弄……
讲底层离不了汇编这个有点棘手的东西,我还一度担忧本身汇编学得不太过关,会碰到障碍。但这里做者提出一个很实际的要求:之前要求程序员都会写汇 编, 如今要求程序员都会读汇编。这里以一种“读”的方式教人用汇编,不局限于不少细小的语法,让仅仅懂得C的程序员也毫无障碍。仅仅100多页,不只初步讲了 汇编的语法和使用,还配合大量的例子分析来解读产生的汇编代码,让人理解深入,实在是技高一筹。 性能
“优化程序性能”是全书最闪光的章节。做者对一个例子不断优化,讲循环效率和过程调用,到讲存储器引用,一直讲到现代处理器的结构,讲到IA32 处理 器的局限,一路下来,畅快淋漓。还将IA32处理器的优化结果和Compaq Alpha 21164作对比,一目了然的看出哪些优化是处理器相关的,最后讲到profiling(程序剖析)指导优化,能够说平时可以用到的最高技巧(毕竟我还不 是编译器开发人员……)和流程走了一边,现实意义至关之高。
这章把可以用到的全部技巧的原理所有讲解得清清楚楚,不作没必要要的挖深,结合代码,让人丝绝不觉枯燥,真是佩服得五体投地。虽然章节后对编译器优 化还 提供了参考文献以及加深的内容,不过我以为这章的内容已经足够我受用好久了。 优化
“存储器层次结构”实际上能够看做是“优化程序性能”一章的延伸,以及为以后的“虚拟存储器”作铺垫。这章主要详细解释了高速缓存(cache)的工 做方式,以及利用局部性使得cache达到最好效果的方法。 操作系统
而“虚拟存储器”(Virtual Memory)则上升到了操做系统层面,详细解析了VM的实现以及Linux系统上VM组织方式。本身以为最受用的是malloc/free实现的动态存 储器分配的具体方法以及对进程中具体存储结构的了解,还有GC的策略。这些让我感受本身可以作到的事情彷佛又多了一点,一直没法理解的valgrind之 类软件的原理彷佛也有了点眉目。 blog
这两章讲得比较细致,以致于稍微显得有点枯燥。其实我本身喜欢这两章的主要缘由是解了我多年来关于存储器的困惑。不过存储器方面的内容实在博大精深,本身这彻底是得了点皮毛就沾沾自喜。 进程
其实在学计算机方面我仍是挺实用主义的,一直抱着碰到了再去仔细研究好了的态度,因此看书广泛不认真,只是求到时候可以找获得参考。不过这本书我以为 格外有趣,因此也看得格外认真,把每节后的习题都作了,家庭做业则等着过两天复习(计划是这样的……)的时候加深印象。 开发
不过一直没找到CSAPP的实习手册。其中有个“二进制炸弹”实验很是吸引人,典型的反汇编做业,有点点实现我小时候破解愿望的感受——但愿找到之后不要让我太失望,呵呵。 编译器
【From 京东读者评论】