我是这样啃《深入理解计算系统》的……

haige_songshu 2013-06-09 11:10:21
对《深入理解计算机系统》(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之类软件的原理似乎也有了点眉目。

这两章讲得比较细致,以至于稍微显得有点枯燥。其实我自己喜欢这两章的主要原因是解了我多年来关于存储器的困惑。不过存储器方面的内容实在博大精深,自己这完全是得了点皮毛就沾沾自喜。


其实在学计算机方面我还是挺实用主义的,一直抱着碰到了再去仔细研究好了的态度,所以看书普遍不认真,只是求到时候能够找得到参考。不过这本书我觉得 格外有趣,所以也看得格外认真,把每节后的习题都做了,家庭作业则等着过两天复习(计划是这样的……)的时候加深印象。

不过一直没找到CSAPP的实习手册。其中有个“二进制炸弹”实验非常吸引人,典型的反汇编作业,有点点实现我小时候破解愿望的感觉——希望找到以后不要让我太失望,呵呵。
...全文
446 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
此去依然 2013-06-11
  • 打赏
  • 举报
回复
一三部分看完。。。第二部分表示啃不动了。。。
FancyMouse 2013-06-10
  • 打赏
  • 举报
回复
引用 楼主 haige_songshu 的回复:
其中有个“二进制炸弹”实验非常吸引人,典型的反汇编作业,有点点实现我小时候破解愿望的感觉——希望找到以后不要让我太失望,呵呵。
http://csapp.cs.cmu.edu/public/bomb.tar
MagiSu 2013-06-10
  • 打赏
  • 举报
回复
这本书里面随便一章都可以深挖成1000页的书。
赵4老师 2013-06-09
  • 打赏
  • 举报
回复
《数字逻辑电路》 《计算机组成原理》 《30天自制操作系统》 《深入解析Windows操作系统-Windows Internals》 《Windows核心编程》
hugett 2013-06-09
  • 打赏
  • 举报
回复
qq453345496 2013-06-09
  • 打赏
  • 举报
回复
看第二章就想到近世代数里边的群环域。。。看了一半直接跳到第三章了,第三章内容不错,就是浮点数的那部分也跳了。。目前就看了这么多
flyrack 2013-06-09
  • 打赏
  • 举报
回复
这书不是一般的大砖块块啊 看到虚拟CPU设计就放下了
a784063999 2013-06-09
  • 打赏
  • 举报
回复
引用 8 楼 ForestDB 的回复:
话说一直停在第2章“信息的表示和处理”
我也是
ForestDB 2013-06-09
  • 打赏
  • 举报
回复
话说一直停在第2章“信息的表示和处理”
majia2011 2013-06-09
  • 打赏
  • 举报
回复
1000多页,看完了,是不是有拿着砸人的冲动,呵呵呵
haige_songshu 2013-06-09
  • 打赏
  • 举报
回复
大家都有什么心得体会,欢迎交流
haige_songshu 2013-06-09
  • 打赏
  • 举报
回复
氰客 2013-06-09
  • 打赏
  • 举报
回复
感谢分享、感觉蛮有用的,我也去看看。
疯狂的红豆 2013-06-09
  • 打赏
  • 举报
回复
哇塞,LZv587啊,我也是刚买了本,看完你说的有种抓紧看的冲动了!!!

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧