C语言中Volatile与Register关键字

目录

区别:

volatile的用途:

Register的用途:


区别:

register:这个关键字请求编译器尽可能的将变量存在 CPU 内部寄存器中而不是通过内存寻址访问以提高效率。注意是尽可能,不是绝对。你想想,一个 CPU 的寄存器也就那么几个或几十个,你要是定义了很多很多 register 变量,它累死也可能不能全部把这些变量放入寄存器吧,轮也可能轮不到你。

volatile:的本意是“易变的”,由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。

所以从作用上来说,这两个关键字的作用是正好相反的,一个是为了最快速递访问,另一个是为了最稳定的访问。

volatile的用途:

一般说来,volatile用在如下的几个地方:

1、中断服务程序中修改的供其它程序检测的变量需要加volatile;

2、在多任务环境下各任务间共享的标志应该加volatile;

3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;

另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。

Register的用途:

C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫寄存器变量

寄存器是cpu的存储部件,即是高速缓存,通常不大,最多几mb。定义这个变量适用于频繁使用某个变量,以加快运行速度,因为保存在寄存器中,省去了从内存中调用,要注意定义了这个变量后,不能取地址!!就是不能使用&符号,这与一般不同。

使用这个关键字有以下几点限制:

  1.所修饰的变量必须是寄存器所能接受的类型(数据长度必须小于或者等于整型的长度)

  2.因为是尽可能放在寄存器里,不一定在内存里,因此不能用取地址运算符“&”来获取register变量的地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值