CSAPP第五章:优化程序性

来源:互联网 发布:电影院订票系统 php 编辑:程序博客网 时间:2024/05/16 15:20

  • 程序的目标:正确性和性能

  • 如何编写高效的程序:
  1. 选择合适的数据结构和算法。
  2. 编译器能够有效优化。
  3. 针对大量运算,并行计算。
  • 编译器的局限性:
  • 无法判断指针(例如两个指针如果指向同一个地方会出现很多莫名的bug,必须检查指针)。
程序性能的表示:CPE。
例子:
  • 1.消除循环的低效率:例如for(int i=0;i<vec.lengh();i++),最好改为:int len = vec.length(); for (int i=0;i<len;i++)。
  • 好处是不需要每一次循环都调用函数。(再例如strlen(),性能差距随着循环次数的增加非线性增大)
  • 2.消除不必要的存储器引用:
  • 3.减少过程调用:但是可能会影响程序的模块性为代价
  • 4.在循环中能够使用局部变量,或者减少寻址操作,指针或者全局变量的赋值最好移动到循环外部。以及通过判断等语句减少循环次数。
  • 读写相关:存储器读的效果依赖于最近的一次存储器写。

  • 小结:性能提高技术:
  1. 高级设计:为遇到的问题选择和合适的数据结构和算法。
  2. 基本编码原则:
  • 消除连续的函数调用:有妥协性的牺牲模块性
  • 消除不必要的存储器引用,引入临时变量保存结果,只有当最后的值计算出来时才放到数组和存储器中
  • 展开循环
  • 读写相关
  • 负载均衡:amdahl定律:想要大幅提高整个系统的速度,必须提高整个系统很大一部分的速度。取决于这个部分有多么重要和速度提高了多少。

原创粉丝点击