CONST挥发性,注册用C挥发,静态挥发性++(const volatile, register v

2019-09-01 07:03发布

我想知道volatile关键字的组合的不同用途和寄存器常量静态关键字。 我不知道有什么影响,所以我认为:

register volatile int T=10;

建议编译器来存储T IN的寄存器和T的值可以从外部某处被修改(OS,硬件,另一个线程)

const volatile int T=10;

程序本身不能修改T,但是T能够代码之外的某处进行修改FROW。

static volatile int T=10;

如果T是一个类的数据成员这意味着类的所有对象具有对于T和T相同的值可以从外部某处进行修改。 如果T是在文件中的全局变量,在其他文件(即是该项目的一部分)的源代码不能访问T,但是T能够从外部的某个地方进行访问。 如果T是在一个函数的局部变量,一旦它已经被初始化保留在内存中,直到节目结束,并且可以从外面的某处进行修改。

是我的想法正确,可以在任何有经验的C ++开发人员给其中上述也许在实际应用中使用的例子,或者是非常罕见的?

Answer 1:

register volatile int T=10;

volatile限定符意味着,编译器不能应用优化或重新排序访问T ,虽然register是一个提示,编译器T将被大量使用。 如果地址T取,提示是简单地被编译器忽略。 需要注意的是register已被弃用,但仍在使用。

实际使用:

我从来没有使用过它从来没有感觉到它的需要,现在真的不能相信任何权利。


const volatile int T=10;

const限定符指T不能通过代码进行修改。 如果试图这样做,编译器会提供一个诊断。 volatile仍然意味着与在壳体1的编译器不能优化或重新排序访问T

实际使用:

  • 在只读模式访问共享存储器。
  • 以只读模式访问硬件寄存器。

static volatile int T=10;

static存储限定符给出T静态存储持续时间(C ++ 11§3.7)和内部连接 ,而volatile仍支配的优化和重新排序。

实际使用:

  • volatile除了你所需要的对象具有静态存储时间和从其他翻译单元无法访问。


文章来源: const volatile, register volatile, static volatile in C++