C语言中重要的关键字有很多,static const extern我们之前都讲过,还有一个在面试中出现的频率也比较高:register。
register翻译过来是寄存器的意思,可以在定义变量的时候加在前面,我们把它称作寄存器变量。
寄存器变量的作用在于提高程序的运行效率。
我们经常用到的存储介质大概有这么几种,硬盘、内存、缓存、寄存器,越往上访问速度越快,当然价格也越高。
运行程序的时候,计算机会把大部分的数据存放在内存中,然后CPU会从内存中读取需要的数据。
虽然访问内存的速度比访问硬盘来的快,但是跟CPU的速度比起来,还是慢了很多。
于是C语言就有了register关键字,被register修饰的变量很有可能放在寄存器中,这样,CPU就能直接从寄存器中读取变量,提高程序的运行效率。
对于需要频繁访问的变量,可以把它声明成寄存器变量。
写个代码试试:
int main() { int i; for(i= 0; i < 10000000; i++); printf("helloworld "); return 0; }i作为循环变量,会被频繁访问。
先是不加register,编译的时候不优化。
root@Turbo:test# gcc test.c -o test -O0 root@Turbo:test#如果不加这个-O选项,有些编译器可能把这样的for循环当作废话优化掉。
运行的时间大概是这样的:
root@Turbo:test# time ./test hellowrold real 0m0.021s user 0m0.020s sys 0m0.000s root@Turbo:test#然后修改代码,在i的前面加上register:
int main() { register int i; for (i = 0; i < 10000000; i++); printf("helloworld "); return 0; }再次编译运行,时间确实会缩短很多:
root@Turbo:test# gcc test.c -o test -O0 root@Turbo:test# time ./test hellowrold real 0m0.004s user 0m0.000s sys 0m0.004s root@Turbo:test#关于register关键字,有个经典的面试题,就是寄存器变量不能做取地址操作?
register int i; &i;C语言中的取地址操作取的是内存的地址,变量放在寄存器中不存在地址这一说法,如果强行取地址,编译就会报错。
root@Turbo:test# gcc test.c -o test -O0 test.c: In function ‘main’: test.c:8:2: error: address of register variable ‘i’ requested 8 | &i; | ^ root@Turbo:test#最后,register关键字还容易存在一个误区:既然register能提高程序的运行效率,那能不能把所有的变量都声明成register?
这个肯定不行,因为寄存器容量毕竟有限,声明的太多,寄存器根本放不下。
所以少量的还行,都声明成register,并没有效果。
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
寄存器
+关注
关注
30文章
5032浏览量
117741 -
C语言
+关注
关注
180文章
7533浏览量
128772 -
缓存器
+关注
关注
0文章
63浏览量
11579 -
for循环
+关注
关注
0文章
61浏览量
2420
原文标题:regiseter关键字
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
c语言中 volatile _Bool 关键字说明
volatile 关键字呢?volatile总是与优化有关,编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在哪里使用、在哪里失效,分析结果可以用于常量合并,常量传播等优化,进一步可以消除一些代码
发表于 01-06 10:46
C++笔记010:C++对C的扩展——register关键字增强
更多精彩关注微信公众号:依法编程register关键字:请求编译器让变量直接放到CPU内部寄存器里面,而不是通过内存寻址访问,速度快。在C语言中,register修饰的变量不能取地址,去寄存器变量
发表于 08-11 12:34
【视频】C语言知识免费视频教程-C语言关键字_signed-unsigned-auto-连载视频第3集(视频持续更新……)
单片机C语言相关的问题,都可以在帖子下面讨论。C语言教程第一集:认识C语言
发表于 03-12 15:14
【视频】C语言知识免费视频教程-C语言关键字-static-连载视频第4集(视频持续更新……)
单片机C语言相关的问题,都可以在帖子下面讨论。C语言教程第一集:认识C语言
发表于 03-19 13:37
【视频】C语言知识免费视频教程-C语言关键字-register-连载视频第5集(视频持续更新……)
单片机C语言相关的问题,都可以在帖子下面讨论。C语言教程第一集:认识C语言
发表于 03-26 14:29
【视频】C语言知识免费视频教程-C语言关键字_extern-连载视频第9集(视频持续更新……)
单片机C语言相关的问题,都可以在帖子下面讨论。C语言教程第一集:认识C语言
发表于 04-26 14:04
C语言volatile关键字详解 精选资料分享
1.volatile和什么有关百度翻译是这样子翻译volatile的:图1-1 百度翻译volatile截图volatile属于C语言的关键字,《C Primer Puls》 是这样解
发表于 07-22 07:20
Volatile关键字对于嵌入式开发有什么作用呢
前言在进行嵌入式开发中,我们往往会看到一个名为volatile或者__IO的关键字,那么,它们对于嵌入式开发有什么作用呢?浅析volatile数据类型实际上,__IO和volatile是相同的关键字
发表于 11-05 09:20
评论