开发者社区> sky-heaven> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

register 用法注意与深入--【sky原创】

简介: register 用法注意与深入:   gcc -o test  test.c   这样编译的话会报错的,因为寄存器变量是不能取地址的,只有内存的变量才能取地址 寄存器变量取的是虚拟地址   #include   int main(void) {      register ...
+关注继续查看
register 用法注意与深入:
 
gcc -o test  test.c
 
这样编译的话会报错的,因为寄存器变量是不能取地址的,只有内存的变量才能取地址
寄存器变量取的是虚拟地址
 

#include <stdio.h>

 
int main(void)
{
     register int i;
     int *p = &i;
 
     return 0;
}
 
深入解析:
 
一个变量存储是这样的,运行了一段程序后,就是开启了一个进程,那么这个进程的变量就是要存在进程的虚拟内存中申请,一般我们所说的register定义变量的话,那么变量就是寄存器变量了,这样说会好理解,但是想深入理解,或者是准确理解的话,那样的说法是不正确的,寄存器是什么?是硬件,变量只是一个数,而且是应用层定义的一个变量,我一个关键字就可以直接访问寄存器吗?答案当然不行,那过程到底是怎样的呢?
 
不少资料上说register定义变量可以让变量访问速度更快,因为寄存器速度要远远快于内存的速度,我们一般定义的变量都是存放在内存上面的,如果是访问寄存器的话那速度自然快很多。
 
其实register定义变量的话不一定能让变量作为寄存器变量的,还要看编译器,当编译器满足条件的时候,这样的register关键字才有用,如果编译器没有做处理,你就算定义了register也是没有用 的,
 
下面说具体过程:
 
register定义变量int i后,进程的内存变量 i 就与物理寄存器进行了映射,这是内核完成的,应用层 <--> 内核映射
,然后内核<-->寄存器映射地址映射
 
所以这样register int i;
就相当于是对寄存器进行了读写,是通过内核映射过去的,也就是我们常说的MMU
 
MMU(Memory Management Unit),是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程的操作系统。
 
欢迎与本人交流
 

新浪博客:http://blog.sina.com.cn/u/2049150530
csdn博客:http://blog.csdn.net/u011749143
博客园:http://www.cnblogs.com/sky-heaven/
新浪微博:张昺华--sky
知乎:http://www.zhihu.com/people/zhang-bing-hua

【作者】张昺华
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SSM 项目 Library Manager System
SSM 项目 Library Manager System
16 0
JavaScript学习(十三)---RegExp对象
目录 创建RegExp对象 1.使用RegExp的显式构造函数 2.使用RegExp的隐式构造函数,采用纯文本格式 RegExp对象的属性 静态属性: index属性: input属性: lastIndex...
716 0
java中instanceof的用法
A instanceof B 前一个操作数通常是一个引用类型的变量。 后一个操作数通常是一个类(也可以是接口,可以把接口理解为特殊的类)。 它用于判断前面的对象是否是后面的类,或其子类、实现类的实例。
727 0
+关注
sky-heaven
我是一个技术爱好者,喜欢分享交流技术心得
1191
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载