CSAPP第五章:优化程序性

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

  • 如何编写高效的程序:
  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定律:想要大幅提高整个系统的速度,必须提高整个系统很大一部分的速度。取决于这个部分有多么重要和速度提高了多少。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值