提到c语言中的register,相信大家都不陌生了,不过大家对它的了解或多或少的总有那么一些不足,今天作者将带大家了解一下register,如有错误,敬请斧正,不胜感激!
在了解解这个之前呢,先带大家了解一下存储器的概念,在我们使用的计算机中,常用的存储器有寄存器、cache(高速缓存器)、内存、硬盘,计算机访问这四个存储器的速度由前往后依次变慢,造价呢,也是依次变低,其中寄存器和cache是集成在cpu内部的,这也是它们访问速度快的一个重要的原因,这里介绍的内容呢由于涉及硬件较多,所以不再过多赘述,有兴趣的可以自己了解。
register的语法结构如下:
register 数据类型 变量名=初值;
例如:register int a = 10; #请求计算据将初值为10的整型变量a放入到寄存器中
register修饰变量,就是请求计算机将所修饰的变量放入到寄存器中,这样可以提高计算机的运行效率,原因就是cpu无需从内存中访问变量读取数据了。那么,什么样的变量可以放入到寄存器中呢?
1. 局部的(全局会导致CPU寄存器被长时间占用,因为全局变量的生命周期是从定义开辟内存开始直到程序运行结束)
2. 不会被写入的(写入就需要写回内存,后续如果再读取检测的话,寄存器的运用也就失去了意义)
3. 高频被读取的(提高运行效率)
4. 如果要使用,请不要大量使用,因为寄存器数量有限
需要大家注意一点:不能对寄存器中的变量取地址,所以无法对寄存器变量用printf()和scanf()函数,为什么会这样呢?因为我们通常意义上的地址是针对于内存的,我们开辟的一般变量也都是开辟在内存上的,而寄存器是没有地址这一概念的。
那么我们究竟要不要用register将我们的变量放到寄存器中呢?
答案是通常不需要,因为我们的电脑一般会自动使用来提高运行速度,而且我们的电脑寄存器的数量是有限的,我们所作的操作只是建议计算机将这个变量放入到寄存器中,至于计算机是否会做,还受寄存器数量的影响。
那么有人会问了,那么cpu访问寄存器的速度这么快,那么我们可不可以让我们电脑的存储器全部由寄存器构成呢?理论上是可行的,但造价昂贵,且没有必要,因为计算机的运行速度不止由寄存器这一个方面决定,所以即使计算机的存储器都是由寄存器构成而其它硬件条件不改变的话,计算机的运行效率提高程度也是极其有限的,好了,今天的分享到此结束,感谢浏览,如果觉得这篇文章对自己有所帮助的话,点一个小小的赞可以吗?