普通变量与寄存器变量速度对比

寄存器变量速度比普通变量存取速度快。对于C程序,寄存器变量不能取地址,编译器会报错。对于C++程序,可以对寄存器变量进行取址操作,编译器不会报错,但是取出来的地址似乎不是寄存器地址,而是内存地址,不知道是不是C++编译器在涉及取址运算时将寄存器变量自动转换成普通变量来处理。

1、只有普通运算

对于上述的普通累加运算而言,采用普通变量耗时0.7177秒,采用寄存器变量耗时0.111秒,速度上确实有明显的差别。

2、涉及取址运算

如果涉及取址运算,采用普通变量耗时0.7867秒,采用寄存器变量耗时0.4792秒,速度上的差别就没有那么显著了。大家可以发现两种变量取出的地址分别是0x6ffe38和0x6ffe3c,是连续的两个地址,那都是内存地址。不能确定,是不是C++编译器在涉及取址运算时自动将寄存器变量当成普通变量来处理。

实际使用时,底层硬件环境的实际情况对寄存器变量的使用会有一些限制。每个函数中只有很少的变量可以保存在寄存器中,且只允许某些类型的变量。但是,过量的寄存器声明并没有什么害处,这是因为编译器可以忽略过量的或者不支持的寄存器变量声明。另外,无论寄存器变量实际上是不是存放在寄存器中,它的地址都是不能访问的。在不同的机器中,对寄存器变量的数目和类型的具体限制也是不同的。 ——《C程序设计语言(第二版) Brain W.Kernighan & Dennis M.Ritchie》

对于C程序,寄存器变量是不能取址的:

普通变量与寄存器变量速度对比相关推荐

  1. 变量(自动变量、静态变量、寄存器变量、外部变量)与C的内存分配malloc/free、calloc/recalloc

    C语言中的4种存储类别:自动变量(auto).静态变量(static).寄存器(register).外部变量(extern). 自动变量 通常定义在自定义函数内或代码段(用{}括起来的)定义的变量,都 ...

  2. C语言中变量存储类别——自动变量,寄存器变量,静态外部链接;

    c提供了多种不同模型或存储类别在内存中存储数据. 作用域: 作用域描述程序中可访问标识符的区域. 作用域描述了程序中可以访问一个标识符的一个或多个区域.即变量的可见性. 一个变量的作用域可以是代码块作 ...

  3. 静态变量、自动变量与寄存器变量的存储

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/SunXiWang/article/details/78539052 一.我们声明的变量有几类? 变量 ...

  4. 【C语言必经之路——第1节】自动变量(auto)外部变量(extern)静态变量(static)寄存器变量(register)

    目录 一.auto变量 二.extern变量 三.static变量 static的作用为: 1.修饰全局变量 2.修饰局部变量 3.修饰函数 四.register变量 一.auto变量 若定义一个局部 ...

  5. 【C语言】寄存器变量

    文章目录 1.寄存器变量 2.寄存器变量速度测试 1.寄存器变量 在程序运行时,根据需要到内存中相应的存储单元中调用,如果一个变量在程序中频繁使用,例如循环变量,那么,系统就必须多次访问内存中的该单元 ...

  6. 「C语言」寄存器变量与内存变量

    参考链接: 寄存器变量是什么?及它的存储种类有哪些? 静态变量.自动变量与寄存器变量的存储 寄存器变量-百度百科 前两天看师兄给的C语言的一本小册子,看到: 内存变量或寄存器变量是指进程运行过程中的变 ...

  7. C语言寄存器变量register

    转载自 https://blog.csdn.net/mouse_ts/article/details/45097603 用register声明的变量是寄存器变量,是存放在CPU的寄存器里的.而我们平时 ...

  8. 关于寄存器变量下面说法说法正确的是

    只有局部自动变量和形式参数可以作为寄存器变量,其他(如全局变量)不行 A 寄存器变量可以声明全局变量 B无法取寄存器变量的地址 D.寄存器变量访问效率要比普通变量访问效率高 E.声明寄存器变量时有可能 ...

  9. 在c语言中 寄存器变量的说明符是,c语言性能优化—使用寄存器变量

    c语言性能优化-使用寄存器变量 当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间.为此,C语言提供了一种变量,即寄存器变量.这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而 ...

最新文章

  1. 问卷星调查学生对《算法》教学的建议与反馈
  2. JS组件系列——BootstrapTable 行内编辑解决方案:x-editable
  3. linux驱动之触摸屏驱动程序
  4. 几句话就能让你明白:IPv6与Voip
  5. Code::Blocks 16.01 改变注释的的颜色
  6. ios最新防越狱检测插件_-一份从零开始的iOS插件分享-
  7. 每日10行代码173:测试下yafu的质因数分解能力
  8. 科技爱好者周刊:第 84 期
  9. 利用scrapy爬取美图录网站图集按模特姓名存储到本地(三)
  10. 手机游戏连接计算机屏幕,手机怎么投屏到电脑?简单几个步骤就能实现,看电影玩游戏爽爆了...
  11. 解决vmware不能上网的问题
  12. CredSSP 加密数据库修正
  13. 使用 Python 进行面部识别
  14. java小组口号,小组口号大全
  15. Vivado使用技巧(17):创建IBIS模型
  16. 在arm Cortex-A9开发板移植rtl8821au无线网卡并实现与外网通信
  17. 探讨企业即时通讯软件的价值
  18. git push origin master和git push有什么区别
  19. latex中的三种字体格式
  20. 实验笔记之——单片机烧录的实验过程

热门文章

  1. 在家办公怎么弄?华为云DevCloud宝典一看就懂——迭代开发篇
  2. 解惑Python模块学习,该如何着手操作...
  3. socket实现一个简单的echo服务
  4. (组合数学习题)递推关系一道经典题分析与解答
  5. anaconda安装tensorflow后,matplotlib无法调用的解决方法
  6. 【方便自己使用】KKT条件
  7. 接口中的成员只有静态常量和什么_为什么阿里工程师代码写的好?看看他的代码规范就知道了...
  8. java 当前时间小时数,java获取当前时间前几个小时的时间
  9. flutter 获取定位_Flutter 实现高德定位
  10. 公众号点击图片变成另一张_公众号互动内容:小众潮流or下一个风口?| 新榜观察...