register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。

注意是尽可能,不是绝对。你想想,一个CPU的寄存器也就那么几个或几十个,你要是定义了很多很多register变量,它累死也可能不能全部把这些变量放入寄存器吧,轮也可能轮不到你。

一、皇帝身边的小太监----寄存器

不知道什么是寄存器?那见过太监没有?没有?其实我也没有。没见过不要紧,见过就麻烦大了。大家都看过古装戏,那些皇帝们要阅读奏章的时候,大臣总是先将奏章交给皇帝旁边的小太监,小太监呢再交给皇帝同志处理。这个小太监只是个中转站,并无别的功能。

好,那我们再联想到我们的CPU。CPU 不就是我们的皇帝同志么?大臣就相当于我们的内存,数据从他这拿出来。那小太监就是我们的寄存器了(这里先不考虑CPU 的高速缓存区)。数据从内存里拿出来先放到寄存器,然后CPU 再从寄存器里读取数据来处理,处理完后同样把数据通过寄存器存放到内存里,CPU 不直接和内存打交道。这里要说明的一点是:小太监是主动的从大臣手里接过奏章,然后主动的交给皇帝同志,但寄存器没这么自觉,它从不主动干什么事。一个皇帝可能有好些小太监,那么一个CPU 也可以有很多寄存器,不同型号的CPU 拥有寄存器的数量不一样。

为啥要这么麻烦啊?速度!就是因为速度。寄存器其实就是一块一块小的存储空间,只不过其存取速度要比内存快得多。进水楼台先得月嘛,它离CPU 很近,CPU 一伸手就拿到数据了,比在那么大的一块内存里去寻找某个地址上的数据是不是快多了?那有人问既然它速度那么快,那我们的内存硬盘都改成寄存器得了呗。我要说的是:你真有钱!

二、使用register 修饰符的注意点

虽然寄存器的速度非常快,但是使用register 修饰符也有些限制的:register 变量必须是能被CPU 寄存器所接受的类型。意味着register 变量必须是一个单个的值,并且其长度应小于或等于整型的长度。而且register 变量可能不存放在内存中,所以不能用取址运算符“&”来获取register 变量的地址。

register---C语言中最快的关键字相关推荐

  1. C002--c语言中的标识符,关键字及变量常量的声明和使用

    因为我第一个学习的计算机语言是java,因此我在学习一门新的语言时,或多或少会用学习过的语言与新学习的语言进行对比,然后找到它们之间的不同,如果没有学习过其他语言,第一次接触的计算机语言就是c语言的话 ...

  2. C语言中定义常量的关键字是什么,C++_详解C语言中const关键字的用法,关键字const用来定义常量,如 - phpStudy...

    详解C语言中const关键字的用法 关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const ...

  3. c语言查看cpu温度代码_很多程序员都不知道,C语言中还有“快类型”和“小类型”...

    虽说C语言是一门很成熟的编程语言,但是近些年来也是有所发展的,从早期的C89到后来的C99.C11等新标准,C语言逐步增加了许多好用的功能,例如新标准头文件"stdint.h"的添 ...

  4. 在python语言中定义类的关键字是_Python 使用 _________________ 关键字来定义类。_学小易找答案...

    [判断题]我国公民的作品著作权的保护期为50年. [单选题]The broad principle that requires expenses to be reported in the same ...

  5. python中什么是关键字参数_如何使用python语言中函数的关键字参数的用法

    一般情况下,在调用函数时,使用的是位置参数,即是按照参数的位置来传值:关键字参数是按照定义函数传入的参数名称来传值的.那么,关键字参数怎么使用? 工具/原料 python pycharm 截图工具 W ...

  6. c语言关键字_C语言初学者必须掌握的关键字!

    相信这么努力的你 已经星标了我 老九学堂 你身边的IT导师 其实小伙伴在写代码的时候,关键字还是用的比较多的,  今天大雄主要就平常中用到的常用关键字进行总结,便于小伙伴们更全面的理解其在代码中的意图 ...

  7. java语言中声明布尔型_【Java初探02】——Java语言基础

    本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...

  8. Gox语言中的基本数据类型及其转换-GX5.1

    Gox语言默认选用Qlang语法引擎,Qlang脚本语言又是基于Go语言(Golang)做了一定的改进,数据类型基本继承自Go语言,数据的赋值等操作也基本类似但略加改进和变化.一个主要的不同是,Gox ...

  9. 【重温经典C语言】~c语言中%x、%c、%d、%x等等等、c语言取地址符的作用、C语言中的 联合体

    本章目录: 1. c语言中%x.%c.%d.%x等等等 2. c语言取地址符&的作用 3. 了解 C语言中的 联合体 3.1 什么是联合体? 3.2 定义 3.2.1 举例 3.3 初始化联合 ...

最新文章

  1. GNU make manual 翻译( 一百一十九)
  2. 解决Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile
  3. 《敏捷个人-认识自我、管理自我.pdf》更新至 v0.7
  4. XSS中JavaScript加密以及Filter bypass
  5. Windows WorkFlow Foundation学习资源
  6. 数字后端——布图规划
  7. AUTOSAR从入门到精通100讲(二十七)-AutoSar模式管理总揽
  8. 深入浅出VC++串口编程之基于Win32 API
  9. 健康饮食-美味诱人的鸡肉香菇烩什锦[我写绿色IT]
  10. 5亿美元续命!Uber自动驾驶存亡之秋喜获丰田投资
  11. NGUI组件参数总结
  12. 小程序数据缓存机制应用
  13. 计算机网络双绞线和交叉线的区别,交叉线-什么是交叉线、直通线和双绞线?各有什么区别 – 手机爱问...
  14. 什么是面向对象的编程
  15. 计算机配置有哪10个,win10配置有什么要求 win10配置要求及特点介绍【图文】
  16. keil软件下载安装与新建工程
  17. 2020最火爆BI产品对比来啦!亿信ABI VS FineBI数据分析谁最行
  18. Uva 1616 Caravan Robbers (商队抢劫者)
  19. 舒亦梵:4.24非农周即将来临,作为投资者的你做好准备了吗
  20. Python爬取豆瓣+数据可视化

热门文章

  1. 分布式环境下的session共享
  2. Redis中的zset 有序集合
  3. rocketmq-console集群监控平台搭建
  4. Redis工具类封装讲解和实战
  5. mysql触发器如果某个字段被修改_mysql trigger触发器 一张表一个字段改变 更新另一张表对应字段...
  6. Spring Boot配置文件有提示
  7. 宝塔安装sqlserver_宝塔面板for windows 连接mssql2008
  8. 反向传播算法_反向传播算法:定义,概念,可视化
  9. html 列表循环_python web开发:内置标签与过滤器/循环/条件判断
  10. ubuntu中supervisor的安装和学习