第五章 优化程序性能


编译器安全优化的局限性


  1. 内存别名使用 :两个指针可能指向同一个内存位置
  2. 函数调用 :函数可能修改全局变量

程序性能提高技术


  1. 选择适当的 算法和数据结构
  2. 避免限制编译器优化的因素
    2.1 消除连续的函数调用 ,将函数调用移到循环外,将执行多次但结果不会改变的计算移动到循环外
    2.2 消除不必要的内存引用(指针的读写) ,引入临时变量保存中间结果,最后再把结果存放到数组或全局变量中
  3. 结构化代码以利用硬件功能
    3.1 展开循环 ,增加每次迭代计算的元素数量
    3.2 使用多个 累计变量 (循环展开同时使用不同的累计变量)和 重新结合 技术(括号的结合位置,浮点运算不满足结合律),提高指令级并行
    3.3 使用功能性风格重写条件操作(?:),使得编译采用 条件数据传送 而非条件跳转
    3.4 减少内存写/读相关(一个内存读的结果依赖于一个最近的内存写)

评论

还没有登陆?评论请先登陆注册

还没有评论,抢个沙发吧!

 联系方式 contact me

Github
Email
QQ
Weibo