This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
例如:
volatile unsigned char var;
void test(void)
{
a = var;
b = var;
……
}
如果不声明volatile,第二次读var的值,编译器将会使用第一次a = var;时获得的var值, 在这期间,编译器会假设var不会被外部中断、或者别的函数改变。
但是,实际上,如果var可能是寄存器值或者被中断程序和应用程序共享的全局变量,两次读取之间,var的值可能会被修改,如果不声明为volatile,则会得到一个旧的值。
如果对变量声明为volatile,则编译器不会对这个变量做任何假设。
读的时候volatile是不是可以控制编译器不从Cache中读取该变量?那写呢,如果存在Cache中,是不是也会直接绕过Cache操作变量的地址呢。
如果我使能了cache,是不是可以通过volatile关键字实现绕过cache呢?