目录

  • 优化概述
  • _O0优化
  • _O1优化
  • _O2优化
  • _O3优化
  • volatile关键字避免优化

优化概述

如果将未经优化的C语言程序直接运行会发现运行效率较低,并且产生的代码较大,而通过优化可以较好地解决这些问题。

优化的作用是对循环进行化简,重新组织表达式和声明,将变量直接分配到寄存器中。

通过优化可以提高程序运行效率,缩小程序编码数量。

C/C++编译器提供了不同的优化选择,通过修改cl55命令行中的-on选择就可以方便地选择不同的优化等级,n代表优化等级,包括0、1、2和3。下面给出不同优化等级的功能。

_O0优化

1、 简化控制流图
2、把变量分配到寄存器
3、分析循环的各种情况,只保留一个退出循环的分支
4、删除未用的代码
5、简化表达式和声明
6、把用inline声明的函数变为调用关系

_O1优化

除了O0的各种优化功能外,还有如下功能:
1、在分配变量时,将数值直接赋给变量而不是给出变量的索引值
2、去掉没有用的分配变量和表达式
3、去掉本地通用表达式

_O2优化

除了O1的各种优化功能外,还有如下功能:
1、完成循环优化
2、去掉全局通用的子表达式
3、去掉全局没有用的分配变量和表达式
4、完成循环的化解
5、当只用-O选项时优化器自动进行-O2优化

_O3优化

除了O2的各种优化功能外,还有如下功能:
1、去掉未调用的函数
2、简化返回值未使用的函数
3、将小函数进行内嵌调用
4、对被调用的函数声明进行重新排序,以便被优化的调用方能够找到该函数
5、完成文件级优化

volatile关键字避免优化

优化器分析数据流时将尽量减少对内存的访问,如果这个数据必须从内存中得到,则该数据必须用volatile关键字定义,这样可以使编译器不对该变量进行优化。
例如声明一个指针

unsigned int *ctrl;

当在循环中有如下语句时

while (*ctrl != 0xFF);

优化器将只在进入循环的初始化中进行一次内存读,而在循环当中不在更新该变量的内容,如果该变量被中断或其他程序改变,由于循环中的ctrl的值没有更新,将会使程序不能按照正确的方式执行,这里应当用如下方法声明ctrl:

volatile unsigned int *ctrl;

特别当该变量在中断函数中被赋值,而该变量在主函数的循环中被用到时,必须用volatile声明该变量。

C/C++代码优化方法相关推荐

  1. 【编译原理笔记16】代码优化:流图,常用代码优化方法, 基本块的优化

    本次笔记内容: 8-1 流图 8-2 常用代码优化方法一 8-3 常用代码优化方案二 8-4 基本快的优化 本节课幻灯片,见于我的 GitHub 仓库:第16讲 代码优化_1.pdf 文章目录 流图 ...

  2. 优化函数html代码,CSS代码优化方法

    div+css代码优化方案介绍-css代码优化篇 css代码优化作用与意义 1.减少占用网页字节.在同等条件下缩短浏览器下载css代码时间,相当于加快网页打开速度 2.便于维护.简化和标准化css代码 ...

  3. Java 程序代码优化方法

    性能优化是一个永恒不变的主题,养成良好的编码习惯,能够极大地提高程序的性能.这篇文章整理了 java 开发中性能优化的一些方法.  ArrayList & LinkedList 一个是线性表, ...

  4. html seo设置,搜索引擎优化中的HTML代码优化方法-如何做好SEO

    一. h标签优化 友爱网团队认为,网站代码中h标签的优化是非常重要的一部分.h-标签分为h1-h6标签.H1标签是h标签中重要的一个,它也支付了重量.因为一个页面只能呈现一次H1标签,和往常一样,H1 ...

  5. css代码优化思路,CSS代码优化方法

    CSS代码怎么优化 最近看过许多网友制作的SKIN的CSS文件,发现其中有着许多冗余的代码.下面我来跟大家介绍一下,如何清除这些冗余的代码,让你的CSS文件更加简洁. 一.margin.padding ...

  6. MATLAB中代码优化的两种方法

    MATLAB中的代码优化 MATLAB中的代码优化有两种重要的方法:预分配组和向量化循环. 我们举一个简单的例子来看,创建一个MATLAB函数来计算f(x) = sin(x / 100π): func ...

  7. java一般方法有哪些方法有哪些方法_Java代码优化有哪些方法?

    Java代码优化是Java编程开发很重要的一个步骤,Java代码优化要注重细节优化,一个两个的细节的优化,产生的效果不大,但是如果处处都能注意代码优化,对代码减少体积.提高代码运行效率是有巨大帮助的, ...

  8. 查看unlix服务器host文件,php代码优化及php相关问题总结

    php代码优化及php相关问题总结 发布于 2014-09-07 11:33:38 | 99 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pr ...

  9. 编译原理(8):代码优化

    声明:本系列文章,是根据中国大学MOOC网 哈工大的编译原理 这门课学习而成的学习笔记. 一.流图 基本块(Basic Block) 基本块是满足下列条件的最大的连续三地址指令序列 控制流只能从基本块 ...

最新文章

  1. windows7 下的日期没有internet时间的选项卡
  2. python适合零基础学习吗-零基础能学好Python吗?哪些人更适合学习?
  3. 用python中的cv2库打开摄像头
  4. uglifyjs压缩JS
  5. 那些年,我们踩过的 Java 坑
  6. 深度学习(二)——深度学习常用术语解释, Neural Network Zoo, CNN, Autoencoder
  7. linux 信号_Linux的信号和线程
  8. data类型的Url的格式
  9. 单片机串口通信电平不匹配的解决电路,5V 3.3V串口通讯
  10. POJ2260 ZOJ1949 UVA541 Error Correction题解
  11. Intel Visual Fortan与gfortran使用rename函数的区别
  12. 软考初级-程序员了解
  13. 阿里用的java编码规范积累
  14. 建筑设计行业等级分类及承担任务范围
  15. 完全卸载VMware
  16. 常见测试用例设计之水杯
  17. 无死角窥探的焦虑:AI如何反击隐私侵占?
  18. 项目十大管理(四)成本管理
  19. Linux 系统指令
  20. springboot车辆管理系统的设计与实现毕业设计源码031034

热门文章

  1. relative布局html,CSS的四种布局方式static/relative/fixed/absolute
  2. 如何玩转CSS的Id 和 Class选择器?
  3. Pycharm社区版安装教程(永久免费,随时升级)
  4. 杭电考研计算机专业课_杭州电子科技大学计算机考研专业课平均分76.03,国家线复试是这个原因!...
  5. webstorm中vue项目--运行配制
  6. jquery简单实现点击弹出层效果实例
  7. Windows PowerShell Cookbook
  8. vue 学习之路 —— 图片的引入
  9. sublime text3 使用SVN插件
  10. Bundle Identifier