普通变量与寄存器变量速度对比
普通变量与寄存器变量速度对比
寄存器变量速度比普通变量存取速度快。对于C程序,寄存器变量不能取地址,编译器会报错。对于C++程序,可以对寄存器变量进行取址操作,编译器不会报错,但是取出来的地址似乎不是寄存器地址,而是内存地址,不知道是不是C++编译器在涉及取址运算时将寄存器变量自动转换成普通变量来处理。
1、只有普通运算
对于上述的普通累加运算而言,采用普通变量耗时0.7177秒,采用寄存器变量耗时0.111秒,速度上确实有明显的差别。
2、涉及取址运算
如果涉及取址运算,采用普通变量耗时0.7867秒,采用寄存器变量耗时0.4792秒,速度上的差别就没有那么显著了。大家可以发现两种变量取出的地址分别是0x6ffe38和0x6ffe3c,是连续的两个地址,那都是内存地址。不能确定,是不是C++编译器在涉及取址运算时自动将寄存器变量当成普通变量来处理。
实际使用时,底层硬件环境的实际情况对寄存器变量的使用会有一些限制。每个函数中只有很少的变量可以保存在寄存器中,且只允许某些类型的变量。但是,过量的寄存器声明并没有什么害处,这是因为编译器可以忽略过量的或者不支持的寄存器变量声明。另外,无论寄存器变量实际上是不是存放在寄存器中,它的地址都是不能访问的。在不同的机器中,对寄存器变量的数目和类型的具体限制也是不同的。 ——《C程序设计语言(第二版) Brain W.Kernighan & Dennis M.Ritchie》
对于C程序,寄存器变量是不能取址的:
普通变量与寄存器变量速度对比相关推荐
- 变量(自动变量、静态变量、寄存器变量、外部变量)与C的内存分配malloc/free、calloc/recalloc
C语言中的4种存储类别:自动变量(auto).静态变量(static).寄存器(register).外部变量(extern). 自动变量 通常定义在自定义函数内或代码段(用{}括起来的)定义的变量,都 ...
- C语言中变量存储类别——自动变量,寄存器变量,静态外部链接;
c提供了多种不同模型或存储类别在内存中存储数据. 作用域: 作用域描述程序中可访问标识符的区域. 作用域描述了程序中可以访问一个标识符的一个或多个区域.即变量的可见性. 一个变量的作用域可以是代码块作 ...
- 静态变量、自动变量与寄存器变量的存储
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/SunXiWang/article/details/78539052 一.我们声明的变量有几类? 变量 ...
- 【C语言必经之路——第1节】自动变量(auto)外部变量(extern)静态变量(static)寄存器变量(register)
目录 一.auto变量 二.extern变量 三.static变量 static的作用为: 1.修饰全局变量 2.修饰局部变量 3.修饰函数 四.register变量 一.auto变量 若定义一个局部 ...
- 【C语言】寄存器变量
文章目录 1.寄存器变量 2.寄存器变量速度测试 1.寄存器变量 在程序运行时,根据需要到内存中相应的存储单元中调用,如果一个变量在程序中频繁使用,例如循环变量,那么,系统就必须多次访问内存中的该单元 ...
- 「C语言」寄存器变量与内存变量
参考链接: 寄存器变量是什么?及它的存储种类有哪些? 静态变量.自动变量与寄存器变量的存储 寄存器变量-百度百科 前两天看师兄给的C语言的一本小册子,看到: 内存变量或寄存器变量是指进程运行过程中的变 ...
- C语言寄存器变量register
转载自 https://blog.csdn.net/mouse_ts/article/details/45097603 用register声明的变量是寄存器变量,是存放在CPU的寄存器里的.而我们平时 ...
- 关于寄存器变量下面说法说法正确的是
只有局部自动变量和形式参数可以作为寄存器变量,其他(如全局变量)不行 A 寄存器变量可以声明全局变量 B无法取寄存器变量的地址 D.寄存器变量访问效率要比普通变量访问效率高 E.声明寄存器变量时有可能 ...
- 在c语言中 寄存器变量的说明符是,c语言性能优化—使用寄存器变量
c语言性能优化-使用寄存器变量 当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间.为此,C语言提供了一种变量,即寄存器变量.这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而 ...
最新文章
- 问卷星调查学生对《算法》教学的建议与反馈
- JS组件系列——BootstrapTable 行内编辑解决方案:x-editable
- linux驱动之触摸屏驱动程序
- 几句话就能让你明白:IPv6与Voip
- Code::Blocks 16.01 改变注释的的颜色
- ios最新防越狱检测插件_-一份从零开始的iOS插件分享-
- 每日10行代码173:测试下yafu的质因数分解能力
- 科技爱好者周刊:第 84 期
- 利用scrapy爬取美图录网站图集按模特姓名存储到本地(三)
- 手机游戏连接计算机屏幕,手机怎么投屏到电脑?简单几个步骤就能实现,看电影玩游戏爽爆了...
- 解决vmware不能上网的问题
- CredSSP 加密数据库修正
- 使用 Python 进行面部识别
- java小组口号,小组口号大全
- Vivado使用技巧(17):创建IBIS模型
- 在arm Cortex-A9开发板移植rtl8821au无线网卡并实现与外网通信
- 探讨企业即时通讯软件的价值
- git push origin master和git push有什么区别
- latex中的三种字体格式
- 实验笔记之——单片机烧录的实验过程
热门文章
- 在家办公怎么弄?华为云DevCloud宝典一看就懂——迭代开发篇
- 解惑Python模块学习,该如何着手操作...
- socket实现一个简单的echo服务
- (组合数学习题)递推关系一道经典题分析与解答
- anaconda安装tensorflow后,matplotlib无法调用的解决方法
- 【方便自己使用】KKT条件
- 接口中的成员只有静态常量和什么_为什么阿里工程师代码写的好?看看他的代码规范就知道了...
- java 当前时间小时数,java获取当前时间前几个小时的时间
- flutter 获取定位_Flutter 实现高德定位
- 公众号点击图片变成另一张_公众号互动内容:小众潮流or下一个风口?| 新榜观察...