我想知道变量是否被声明为volatile常量,是否可以使用i / o或任何外设进行更改? 例如: volatile const int input = 0; 这样的变量也可以存储在内存中吗?
答案 0 :(得分:5)
当变量定义为const
时,系统将其作为只读变量。不应修改其值的变量。但是,通过将变量定义为volatile
,程序员会要求编译器避免编译器优化。
让我们举一个例子:
volatile const int flag = 0;
它说flag
是一个变量,其值不应被修改,并要求编译器避免编译器优化,这意味着建议编译器在其他系统运行期间可以更改flag的值过程
一个很好的例子是处理器中的PSW或CPSR(程序状态字)寄存器。它对用户是只读的(const
的示例),并且只有在系统完成算术或逻辑操作时才能由系统修改(volatile
的示例)。
我希望它有所帮助。
答案 1 :(得分:2)
完全取决于编译器,受相关标准引入的任何约束条件的限制。鉴于您可以获取常量的地址并将其分配给指针,您可以推测该常量占用该实例中的内存。
但这并没有真正暗示常量如何存储在内存中。如果这样做没有副作用,编译器可以完全优化它们。或者,const char* foobar = "foobar"
和const char* bar = "bar"
甚至可能不占用不相交的位置:尝试修改(正式未定义的行为)将是灾难性的。使用volatile
会抑制一些优化,但确切的行为仍然依赖于编译器。