【纸上得来终觉浅】
最近开始看这本书,站在巨人的肩膀上,希望有更大的收获!!
一个程序的执行效率是取决于改程序翻译成汇编语言之后的执行的机器指令的条数。而每一个机器指令的执行的周期是一定的。C语言和C++都是高于汇编语言的高级语言,其中,C语言源代码与其相应的机器指不是完全同一的,但是大致是线性的,但是C++语言的源代码与编译代码的开销变化很大的。一条C++指令可能对应于3条汇编指令,而另外的一条可能对应300条。正因为这样,很多时候我们写出来的代码本身就是低效的,这不能全然怪罪于C++语言本身,那么真正的软件的低效又体现在什么地方呢?
设计的效率 ----> 算法与数据结构,程序分解
软件性能---->
编码的效率 ----> 语言结构,系统体系结构 , 库,编译器优化
总得来说,软件的效率是由设计的效率以及编码的效率来决定的,其中,设计的效率关乎程序的高层设计,也就是说你要有把握全局的能力,在很大的程度上,这与语言本身并没有关系,无论再怎么高效的语言都弥补不了糟糕的全局设计。
提到全局设计,数据结构与算法的设计是不得不提的。算法与数据结构的最优化设计绝对是软件性能的必要条件。其次,程序分解,则是指整个程序分解为几个不同的模块,模块之间的交互,以及各个模块的设计。
在完成了上述这些必要的设计之后,编码的效率便提上日程了,语言的结构便是语言本身的结构产生的一些开销对程序性能的影响。系统的体系结构,不考虑体系结构的开发是无用的。现实世界没有无限的内存,无限的计算能力,并行的线程执行,想当然的代码注定是会烂掉的。因此,我们必须铭记于心的是“内存不是无限大的”,“内存访问开销并不是均衡的,对于不同的存储介质的访问时间是有着数量级的差别的”,“我们的程序没有专门的CPU”,“在一台单处理器的计算机上,并行的程序只能是轮询的”。第三点,便是库的选择,库函数的实现是奔着重用性的,这其中对于性能必定有所折中,因此在面对性能严苛的代码段时,自己实现也未尝不可。最后,是编译器的问题了,编译器的优化技术也是影响程序性能的点。但是绝对要记住,不要依赖编译器的优化,而写出低效的代码,应该尽量不依赖编译器的优化。
上述几个因素,是影响程序性能的点,同时也是立志编写出高效的代码的编程人员应该时刻谨记的。
今天读完导言,收益颇丰,很快就可以开始读这本书了,期待C++带给我的更多的惊喜!!!