C/C++代码优化方法
目录
- 优化概述
- _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++代码优化方法相关推荐
- 【编译原理笔记16】代码优化:流图,常用代码优化方法, 基本块的优化
本次笔记内容: 8-1 流图 8-2 常用代码优化方法一 8-3 常用代码优化方案二 8-4 基本快的优化 本节课幻灯片,见于我的 GitHub 仓库:第16讲 代码优化_1.pdf 文章目录 流图 ...
- 优化函数html代码,CSS代码优化方法
div+css代码优化方案介绍-css代码优化篇 css代码优化作用与意义 1.减少占用网页字节.在同等条件下缩短浏览器下载css代码时间,相当于加快网页打开速度 2.便于维护.简化和标准化css代码 ...
- Java 程序代码优化方法
性能优化是一个永恒不变的主题,养成良好的编码习惯,能够极大地提高程序的性能.这篇文章整理了 java 开发中性能优化的一些方法. ArrayList & LinkedList 一个是线性表, ...
- html seo设置,搜索引擎优化中的HTML代码优化方法-如何做好SEO
一. h标签优化 友爱网团队认为,网站代码中h标签的优化是非常重要的一部分.h-标签分为h1-h6标签.H1标签是h标签中重要的一个,它也支付了重量.因为一个页面只能呈现一次H1标签,和往常一样,H1 ...
- css代码优化思路,CSS代码优化方法
CSS代码怎么优化 最近看过许多网友制作的SKIN的CSS文件,发现其中有着许多冗余的代码.下面我来跟大家介绍一下,如何清除这些冗余的代码,让你的CSS文件更加简洁. 一.margin.padding ...
- MATLAB中代码优化的两种方法
MATLAB中的代码优化 MATLAB中的代码优化有两种重要的方法:预分配组和向量化循环. 我们举一个简单的例子来看,创建一个MATLAB函数来计算f(x) = sin(x / 100π): func ...
- java一般方法有哪些方法有哪些方法_Java代码优化有哪些方法?
Java代码优化是Java编程开发很重要的一个步骤,Java代码优化要注重细节优化,一个两个的细节的优化,产生的效果不大,但是如果处处都能注意代码优化,对代码减少体积.提高代码运行效率是有巨大帮助的, ...
- 查看unlix服务器host文件,php代码优化及php相关问题总结
php代码优化及php相关问题总结 发布于 2014-09-07 11:33:38 | 99 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pr ...
- 编译原理(8):代码优化
声明:本系列文章,是根据中国大学MOOC网 哈工大的编译原理 这门课学习而成的学习笔记. 一.流图 基本块(Basic Block) 基本块是满足下列条件的最大的连续三地址指令序列 控制流只能从基本块 ...
最新文章
- windows7 下的日期没有internet时间的选项卡
- python适合零基础学习吗-零基础能学好Python吗?哪些人更适合学习?
- 用python中的cv2库打开摄像头
- uglifyjs压缩JS
- 那些年,我们踩过的 Java 坑
- 深度学习(二)——深度学习常用术语解释, Neural Network Zoo, CNN, Autoencoder
- linux 信号_Linux的信号和线程
- data类型的Url的格式
- 单片机串口通信电平不匹配的解决电路,5V 3.3V串口通讯
- POJ2260 ZOJ1949 UVA541 Error Correction题解
- Intel Visual Fortan与gfortran使用rename函数的区别
- 软考初级-程序员了解
- 阿里用的java编码规范积累
- 建筑设计行业等级分类及承担任务范围
- 完全卸载VMware
- 常见测试用例设计之水杯
- 无死角窥探的焦虑:AI如何反击隐私侵占?
- 项目十大管理(四)成本管理
- Linux 系统指令
- springboot车辆管理系统的设计与实现毕业设计源码031034
热门文章
- relative布局html,CSS的四种布局方式static/relative/fixed/absolute
- 如何玩转CSS的Id 和 Class选择器?
- Pycharm社区版安装教程(永久免费,随时升级)
- 杭电考研计算机专业课_杭州电子科技大学计算机考研专业课平均分76.03,国家线复试是这个原因!...
- webstorm中vue项目--运行配制
- jquery简单实现点击弹出层效果实例
- Windows PowerShell Cookbook
- vue 学习之路 —— 图片的引入
- sublime text3 使用SVN插件
- Bundle Identifier