《代码揭秘读后感》

        大四最后一个学期打着 做毕业设计的旗号玩转了2个多月,下午打球,晚上实战三国杀,难得上午闲暇时间偶尔跑到图书馆借本书,看本书。一直都比较抵触中国许多的技术书籍,对于XX教授所写的书有点反感,感觉教条主义太重,但是却不得不看,因为都是我们的教材,考试都是考的上面的知识,一本书 也就是期末考试前三天看看,或者叫做潜意识记忆吧,只要熬过考试就ok了,咱们挂不起科,伤不起啊!!!

        最近看了一本《代码揭秘》,是以代码的形式来将计算机组成原理,操作系统,汇编 联系在一起,对于计算机专业的学生来说,各种专业基础课都需要学习,但是却仅以考试的形式来决策。如果学的好,可能你能够很清楚的知道 cache实现的基本原理是程序的局部性原理。但是在实际的编程中却不能应用,这往往是比较可惜的,学而不知所用是很悲哀的。《代码揭秘》这本书 对于计算机专业的学生不是很难,里面所有的知识都是大学中必修的专业课,而书中所讲的内容是将所学的多个学科或者多个知识点连接起来,形成一个完整的体系,而且以C或者汇编,甚至机器码的形式来阐述各种原理和现象。

       现在来看一个需要用Cache实现的基本原理分析的题目

程序一:

image

程序二:

      

image

     两段程序都是为了实现对数组的赋值,那请问哪段程序的效率可能更高一点呢?

我们知道 数组的内存分配都是连续的,假设有二维数组arr[3][3]

程序一中的赋值是按行优先赋值,访问顺序为:

[0][0] [0][1] [0][2] [1][0] [1][1] [1][2] [2][0] [2][1] [2][2]

程序二中的赋值是按列优先赋值,访问顺序为:

[0][0] [1][0] [2][0] [0][1] [1][1] [2][1] [0][2] [1][2] [2][2]

如果数组较大,程序二中的赋值违背了局部性原理,会造成Cache命中率降低,甚至为0,从而每次都需要访问内存形成性能上的滞后

也许觉得这样优化有点牵强,貌似没有什么意义,但是在编写图形处理软件或者天文数字的计算的时候,这些优化还是值得的。当然最快最直接的优化是花掉money买个配置更高端的计算机了大笑

         我读了这本书最大的感受是:要让所学的知识能够形成一个清晰的框架,灵活应用,举一反三。就像内存分配一样,数组在连续的内存地址,只要知道一个入口指针就可以遍历数组,抽丝剥茧,逐步扩展,从一个入口点扩展到框架面。否则就像一堆分配内存却没释放的空间,明明存在,你却控制不了。      

posted @ 2011-04-24 11:00  zabery  阅读(622)  评论(1编辑  收藏  举报