C/C++知识点之C语言 之编译器优化
小标 2018-11-01 来源 : 阅读 742 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C语言 之编译器优化,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C语言 之编译器优化,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

C语言的编译器会对变量和代码进行一定的优化,我们看下面这个例子。

int a,b,c;

a=1;

b=a;

c=b;

  这个程序正常运行的时候会这样子:先把a指向的内存空间内放入1

  再把a指向的内存空间里的数读出来放到b指向的内存空间,

  最后再把b指向的内存空间里的数读出来放到c指向的内存空间里。


然而编译器要对这个程序进行一定的优化,编译的时候,直接把1放入三个内存空间中。

这样子在正常运行的时候确实是好事,但是总会有一些特殊的情况发生,比如,一个中断程序突然改变了a的值,那么会发生这样的情况:本来b和c应该是a改变以后的值,可是编译器优化以后就变成了a,b,c都是1,这就很让人郁闷了。


  那么解决方法是,我们在定义变量的前面加个volatile这个关键字,比如:

volatile int a ;

  这样子以后编译器遇到有a参与的运算的时候就不再给你优化了,这样子可以保证你的程序按照你的预期进行,可是如果你大量使用volatile的话,没有优化,就会降低程序运行的效率。

  本来C语言的运行效率就比汇编低了不少,所以说volatile在加的时候要尽量考虑好,因为很多程序运行的时候特别注重效率。


  第二种优化是restrict关键字,这个关键字只用来修饰指针才有用,修饰不同变量没有任何用处。

当你用restrict修饰的指针不会被别的东西给改变的时候,为了提高执行的效率,就会在编译的时候给你修改。

比如下面这个函数:

int main(void)

{

   int *restrict p1 , *restrict p2 ,a;

   *p1=3;

   *p2=5;

   a=2+(*p2);

   return 0 ;

}

  这样子以后,我们做了优化,编译器在编译的时候就会直接把*p2转换成5(因为后面没有指令能够将其修改,所以直接用5来代替了*p2)

  优化有好处也有坏处,总之要谨慎使用。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程