C语言寄存器变量register
2018-04-04 18:10
351 查看
转载自 https://blog.csdn.net/mouse_ts/article/details/45097603
用register声明的变量是寄存器变量,是存放在CPU的寄存器里的。而我们平时声明的变量是存放在内存中的。虽说内存的速度已经很快了,不过跟寄存器比起来还是差得远。
寄存器变量和普通变量比起来速度上的差异很大,毕竟CPU的速度远远大于内存的速度。寄存器有这么两个特点,一个是运算速度快,一个是不能取地址。
学过C的都应该知道每一个变量在内存中都占有一定的的空间,来存放数据。但是在寄存器中的变量是不能取地址的,编译器会报错。
来我们看看寄存器变量和普通话的变量的速度到底能差多少。
这段代码运行用了0.952秒
这段代码运行用了0.094秒
实际使用时,底层硬件环境的实际情况对寄存器变量的使用会有一些限制。每个函数中只有很少的变量可以保存在寄存器中,且只允许某些类型的变量。但是,过量的寄存器声明并没有什么害处,这是因为编译器可以忽略过量的或者不支持的寄存器变量声明。另外,无论寄存器变量实际上是不是存放在寄存器中,它的地址都是不能访问的。在不同的机器中,对寄存器变量的数目和类型的具体限制也是不同的。
——《C程序设计语言(第二版) Brain W.Kernighan & Dennis M.Ritchie》
用register声明的变量是寄存器变量,是存放在CPU的寄存器里的。而我们平时声明的变量是存放在内存中的。虽说内存的速度已经很快了,不过跟寄存器比起来还是差得远。
寄存器变量和普通变量比起来速度上的差异很大,毕竟CPU的速度远远大于内存的速度。寄存器有这么两个特点,一个是运算速度快,一个是不能取地址。
学过C的都应该知道每一个变量在内存中都占有一定的的空间,来存放数据。但是在寄存器中的变量是不能取地址的,编译器会报错。
来我们看看寄存器变量和普通话的变量的速度到底能差多少。
这段代码运行用了0.952秒
这段代码运行用了0.094秒
实际使用时,底层硬件环境的实际情况对寄存器变量的使用会有一些限制。每个函数中只有很少的变量可以保存在寄存器中,且只允许某些类型的变量。但是,过量的寄存器声明并没有什么害处,这是因为编译器可以忽略过量的或者不支持的寄存器变量声明。另外,无论寄存器变量实际上是不是存放在寄存器中,它的地址都是不能访问的。在不同的机器中,对寄存器变量的数目和类型的具体限制也是不同的。
——《C程序设计语言(第二版) Brain W.Kernighan & Dennis M.Ritchie》
相关文章推荐
- 探讨register关键字在c语言和c++中的差异
- 深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
- 提高php运行速度的一些小技巧分享
- PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
- Python下使用Psyco模块优化运行速度
- C语言中auto,register,static,const,volatile的区别详细解析
- C语言关键字auto与register的深入理解
- Linux在应用层读写寄存器的方法及实现实例
- php5.3 不支持 session_register() 此函数已启用的解决方法
- 利用Psyco提升Python运行速度
- PHP错误处理函数register_shutdown_function使用示例
- RHEL7 Minimal Register
- 同样是晶体管,为什么寄存器比内存快呢?
- Win7系统开机弹出模块xxx.dll已加载但找不到接入口DLLRegisterServer的原因及解决方法
- PHP中spl_autoload_register()函数用法实例详解
- 程序状态寄存器访问指令
- linux下vim命令详解
- Python网络编程之协程
- S7-300-400 PLC 数据块的功能及相关指令
- 【Java基础】String StringBuffer StringBuilder