《CSAPP》第三章之学习笔记(一)

来源:互联网 发布:mac桌面显示磁盘 编辑:程序博客网 时间:2024/05/16 14:23

学习的理由

CSAPP,我一直对它恋恋不忘,因为每一次看了都很有收获,但又不能全部记住,而且感觉书很厚,一时半会儿也看不完,但是我觉得这本书是必须要看完的,无论如何,必须看完!因为它是我目前能看懂的比较好的技术书籍之一,其次它是一座通往各种技术的大桥,过了之后,可以继续顺利钻研各种技术了,比如操作系统等。

正文

按照曾国藩对经典书籍的阅读方法,每天读10页,进度正好,因为工作时间不允许看其他书,所以唯有利用晚上下班时间学习。
学习的方法是,看一段程序,然后用gcc编译一下,看看汇编代码如何,是否和书上的对得上,结果我发现了一些有趣的事情,比如:

  • 如果-O1 优化编译,才会和书上对得上,而不加则编译的代码很难看,几乎和C代码是一一对应翻译的,而-O1优化的代码,则会简洁很多。另外如果加上-O2 ,则和原来的C语言代码对不上了,当然功能是实现了的。
  • O2优化编译更有趣的是,对于参数不是指针的过程,它居然一句都不编译,直接略过,内部的思想是反正你不打算做有意义的计算,那干脆编译也省了。
  • 再有就是一直被鄙视的goto语句,其实是个很好的辅助理解的工具,利用它可以将if-else,while,do-while,for循环统一的方式翻译成汇编代码,goto对应于汇编的jump语句。
  • 学习了半天,终于能看懂switch 的汇编了,利用一个指针数组来索引跳转位置,非常高效啊,内心很佩服那些想出来这招的家伙们。

这周还没有阅读完第三章,期待下周能读完。读完后做课后的练习题,最后做拆bomb实验。

总结

  1. 凡是目前看起来吃力的书籍,那就是因为水平还不够,所以先放下它,看能看懂的那些经典书籍。
  2. 对知行合一的新体会,计算机程序设计,必须知行合一,你不知,如何行,你不行,如何知。具体来讲就是你不看书理解,怎么写代码;你不写代码,怎么能真正理解。
  3. 看书一定要专一,看完才看另一本,不然如猴子掰苞谷。以前我就是这么犯傻的,这山望着那山高。到头来啥都知道点,但是都非常肤浅。