c语言性能优化—使用寄存器变量

当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间。为此,C语言提供了一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,从而提高效率。寄存器变量的说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量,而循环计数是应用寄存器变量的最好候选者。

1.只有局部自动变量和形参才可以定义为寄存器变量。因为寄存器变量属于动态存储方式,凡需要采用静态存储方式的量都不能定义为寄存器变量,包括:模块间全局变量、模块内全局变量、局部static变量。

2.register是一个"建议"型关键字,意指程序建议该变量放在寄存器中,但最终该变量可能因为条件不满足并未成为寄存器变量,而是被放在了存储器中,但编译器中并不报错(在C++语言中有另一个"建议"型关键字:inline)。

下面是一个采用寄存器变量的例子:

/* 求1+2+3+….+n的值 */

WORD Addition(BYTE n)

{

register i,s=0;

for(i=1;i<=n;i++)

{

s=s+i;

}

return s;

}

本程序循环n次,i和s都被频繁使用,因此可定义为寄存器变量。 寄存器变量没有地址,所以使用&i 是错误的

在c语言中 寄存器变量的说明符是,c语言性能优化—使用寄存器变量相关推荐

  1. vin-slam中调用ceres库内部代码分析与性能优化

    vin-slam中调用ceres库内部代码分析与性能优化 1,vin-slam中后端参数优化调用流程代码 2,ceres内部的求解流程(未完待续) 首先,很抱歉前几次上传的关于一些图像算法代码不全,主 ...

  2. c语言中负数的读取和存储,C语言中负数的存储方式

    详细介绍负数的文章: https://blog.csdn.net/daiyutage/article/details/8575248 1.以char类型举例,其取值范围是 -128 ~ 127,即-2 ...

  3. c语言中定义字母二维数组,C语言 | 数组

    原标题:C语言 | 数组 1. 一维数组的定义和使用通过对前面知识的学习,我们已经知道如何定义和使用一个一个的各种变量,但总有不够用的时候.举个例子,我要记录一个班32个同学C语言这科的成绩,难道要定 ...

  4. c语言中的一维数组的定义,C语言一维数组的定义和引用

    <C语言一维数组的定义和引用>由会员分享,可在线阅读,更多相关<C语言一维数组的定义和引用(5页珍藏版)>请在人人文库网上搜索. 1.C语言一维数组的定义和引用在程序设计中,为 ...

  5. 编程c语言中_是什么意思,计算机C语言中的关键字:double是什么意思?

    用户提问 RT 推荐答案 double:表示双精度字型. C语言中的关键字: auto :声明自动变量 break:跳出当前循环 case:开关语句分支 char :声明字符型变量或函数返回值类型 c ...

  6. c语言中合法的字符型常量是,C语言习题库(带答案)-排版.doc

    一.选择题 1.以下不能定义为用户标识符的是( ). (A) MAIN (B) _HJ (C) 2ong (D) LINE1 2.以下不能定义为用户标识符的是( ) (A) If (B) H_J (C ...

  7. c语言中 允许函数重载么,简述C++语言支持函数重载问题介绍

    对于C++语言作为一种欲与C兼容的语言,C++语言保留了一部分过程式语言和特点,foo_int_int这样的名字包含了函数名.函数参数数量及类型信息,C++语言就是靠这种机制来实现函数重载的. 因而它 ...

  8. goto在c语言中的作用,关键字goto在C语言中的使用

    1.goto关键字基础知识关键字goto从字面的意思就是"去哪里"的意思,专业一点的话表示无条件跳转的意思(有学过汇编的小伙伴应该会觉得非常像jump指令),在C语言中的使用格式是 ...

  9. asin c语言中 返回值范围_大学C语言考试易错知识点总结

    作者:cggwz 来源:https://blog.csdn.net/cggwz/article/details/103740713?utm_medium=distribute.pc_relevant. ...

最新文章

  1. 独家 | Python利用深度学习进行文本摘要的综合指南(附教程)
  2. Linux安装压缩版的mysql
  3. RecyclerView列表控件漂亮时间线实现
  4. 系统模块——什么是系统模块、path 路径操作、相对路径VS绝对路径
  5. Win 8 app 获取窗口的宽度和高度, 本地化, 及文本读取
  6. php双写绕过,高并发下缓存与数据库双写不一致解决方案
  7. hdu 2441(ACM(Array Complicated Manipulation))
  8. javascript tabIndex属性
  9. 我的家庭私有云计划-2
  10. 第二期临床基因组家系数据分析实战,快速发表SCI文章
  11. php获取继承类方法吗,php如何获取当前类名,继承中的问题?
  12. php like %%,thinkphp实现like模糊查询实例
  13. easyui增删改查全部代码
  14. 使用Whisper框架快速为项目添加国际化支持
  15. oracle发生20001,ORA-20001错误一例
  16. 捡到的苹果手机怎么解id锁_苹果手机维修中软解和硬解的区别
  17. 阿里二面:设计一个电商平台积分兑换系统!
  18. 众筹源码 php,助创cms众筹源码系统v1.0
  19. Nacos如何实现统一配置管理
  20. shell 判断字符串长度

热门文章

  1. [莫比乌斯反演]莫比乌斯函数
  2. java的 jre是什么_Java中JDK和JRE的区别是什么?它们的作用分别是什么?
  3. tinyrenderer学习总结(3)
  4. HTML石头剪刀布游戏,js实现石头剪刀布游戏
  5. python用with读文件的好处_python小课堂39 - 用 with 优雅的读写文件
  6. Max Sum Plus Plus(dp解题)
  7. uniapp android端检查用户是否开启位置服务
  8. 18岁生日 HDU 1201
  9. JVM——OOM处理
  10. 从Url路径中中获取某一参数的参数值