济阳网站建设哪家好,wordpress插件去掉广告,长沙网站优化厂家,视频播放类网站建设费用目录优化概述_O0优化_O1优化_O2优化_O3优化volatile关键字避免优化优化概述
如果将未经优化的C语言程序直接运行会发现运行效率较低#xff0c;并且产生的代码较大#xff0c;而通过优化可以较好地解决这些问题。
优化的作用是对循环进行化简#xff0c;重新组织表达式和声…
目录优化概述_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声明该变量。