1、register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。例如下面的内存块拷贝代码

/* Procedure for the assignment of structures, */

/* if the C compiler doesn't support this feature */

  #ifdef NOSTRUCTASSIGN

  memcpy (d, s, l)

{

register char *d;

  register char *s;

  register int i;

  while (i--)

  *d++ = *s++;

  }

#endif

 

2、但是使用register修饰符有几点限制

(1)register变量必须是能被CPU所接受的类型。

这通常意味着register变量必须是一个单个的值,并且长度应该小于或者等于整型的长度。不过,有些机器的寄存器也能存放浮点数。

(2)因为register变量可能不存放在内存中,所以不能用“&”来获取register变量的地址。

(3)只有局部自动变量和形式参数可以作为寄存器变量,其它(如全局变量)不行。

在调用一个函数时占用一些寄存器以存放寄存器变量的值,函数调用结束后释放寄存器。此后,在调用另外一个函数时又可以利用这些寄存器来存放该函数的寄存器变量。

(4)局部静态变量不能定义为寄存器变量。不能写成:register static int a, b, c;

(5)由于寄存器的数量有限(不同的cpu寄存器数目不一),不能定义任意多个寄存器变量,而且某些寄存器只能接受特定类型的数据(如指针和浮点数),因此真正起作用的register修饰符的数目和类型都依赖于运行程序的机器,而任何多余的register修饰符都将被编译程序所忽略。

注意:

  早期的C编译程序不会把变量保存在寄存器中,除非你命令它这样做,这时register修饰符是C语言的一种很有价值的补充。然而,随着编译程序设计技术的进步,在决定哪些变量应该被存到寄存器中时,现在的C编译环境能比程序员做出更好的决定。实际上,许多编译程序都会忽略register修饰符,因为尽管它完全合法,但它仅仅是暗示而不是命令。

浅析C语言的一个关键字——register相关推荐

  1. C语言的一个关键字——static

    C语言的一个关键字--static Static在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数. 1.Static修饰变量 按照作用范围的不同,变量分为局部变量和全局变量.如果用stati ...

  2. 详解C语言最快关键字——register

    register关键字 文章目录 register关键字 前言 一.register作用 二.储存原件 那么什么样的变量可以用register修饰呢? 总结 前言 提示:这里可以添加本文要记录的大概内 ...

  3. C语言要点总结-关键字保留字总结

    目录 6关键字总结: 6.1define(宏定义) 6.2const(恒定) 6.3 sizeof 6.4static(静态) 6.4.1static修饰局部变量 6.4.2static修饰全局变量 ...

  4. 浅析Java中的final关键字

    浅析Java中的final关键字 谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来 ...

  5. C语言32个关键字与C++62个关键字详解

    C语言32个关键字 关键字 说明 auto 声明自动变量 short 声明短整型变量或函数 int 声明整型变量或函数 long 声明长整型变量或函数 float 声明浮点型变量或函数 double ...

  6. C语言再学习--关键字

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/53021879 C语言一共有32个关键字,如下表所示: 关键字 说明 auto ...

  7. C语言再学习 -- 关键字typedef

    参看:C语言再学习 -- 结构和其他数据形式 参看:C语言再学习 -- 关键字struct(转) 参看:常见typedef 用法 参看:关于typedef的用法总结 一.typedef 介绍 type ...

  8. 【转】浅析Java中的final关键字

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...

  9. c语言系统关键词有哪些,C语言的那些关键字

    C语言有一堆关键字,一共n个,就在下面: 1.类型关键字 系统内置类型:long short int char float double void long:32位整数,默认为有符号,下同 short ...

最新文章

  1. 病毒在网络上传播的基本途径分析
  2. matlab创建符号常量出错,错误:代码中意外的符号/输入/字符串常量/数值常数/特殊...
  3. 线程模型、pthread 系列函数 和 简单多线程服务器端程序
  4. JAVA关系表达式解析微引擎
  5. 创建微服务架构的步骤_成功备战微服务的5个准备步骤
  6. create table as select性能测试
  7. C/C++:Windows编程—Hook IE浏览器实现URL拦截及更改(下)
  8. hosts文件 端口_在Linux系统中使用Vim读写远程文件
  9. SAP License:什么是SAP ECC?与WMS系统集成技术要点
  10. 用计算机得到圣诞树,圣诞树、标签系统和计算思维
  11. C++随机数生成器(default_random_engine)
  12. 路由协议-ospf配置
  13. Java课程设计报告——学生成绩管理系统
  14. python正则表达式抽取mysql慢查询sql本身,de-parameterize,将参数值改为?
  15. 工欲善其事必先利其器(一) —— VScode
  16. android企业自定义桌面
  17. 粉笔科技创新OMO一体化模式 差异化突围职教市场
  18. 收集的JS常用正则表达式等
  19. IDEA破解补丁激活方式
  20. win10 笔记本蓝牙不见了

热门文章

  1. mysql 表a不存在表b_[mysql]SQL查询存在A表但不存在B表的数据
  2. Overleaf-LaTex表格制作
  3. 学习《Linux设备模型浅析之设备篇》笔记(三)
  4. Udacity机器人软件工程师课程笔记(二十三) - 控制(其一)- PID控制及其python实现
  5. 禁止缩放safari浏览器--阻止双击放大--阻止双指掐捏放大-
  6. 如何快速坐地铁高铁?舒工为您带来满满的都是干货~
  7. LINUX下用CTRL+R快速搜索HISTORY历史命令,快速索引到之前使用过的命令行语句
  8. IndentationError: unexpected indent python
  9. [综合面试] 计算机面试书籍与求职网站推荐
  10. Linux从程序到进程