我想了解在使用register、const和static关键字时,volatile关键字的不同用法。我不确定这些关键字的效果是什么,因此需要您帮忙。
register volatile int T=10;
建议编译器将T存储在寄存器中,并且T的值可以从外部(操作系统、硬件、另一个线程)进行修改。
const volatile int T=10;
程序本身无法修改T,但是可以从代码外部修改T。
static volatile int T=10;
如果T是一个类的数据成员,这意味着该类的所有对象都具有相同的T值,并且可以从外部某处修改T。如果T是文件中的全局变量,则其他文件中的源代码(属于该项目的一部分)无法访问T,但可以从外部某处访问T。如果T是函数中的局部变量,则一旦它被初始化,它将一直存在于内存中,直到程序结束,并且可以从外部某处修改。
我的想法正确吗?有没有经验丰富的C++开发人员可以给出一个现实应用的例子,或者这种情况非常少见?
unsigned char const volatile *hd_addr;
- Alok Saveconst volatile int T=10;
这是不同的。 :) - user541686const volatile int
不是static
,它就有可能映射到硬件。像这样的链接器技巧最好避免使用,因为它们并不是很直观,但我曾经在低级嵌入式设备中看到过它们的使用。 - cooperisedvolatile
,它显然具有各种实际应用。你引用的上下文是关于特定组合register volatile
的有用性的评论。 - cooperised