c++编译器,c++面试题

  

  Volatile关键字   

  

  首先,这个关键词在C语言编程中出现的相对不多,包括我在学习C语言之初也没有接触过这个关键词。后来看到一个C语言的笔测,通过查资料了解到了这个关键词。现在我们一起来讨论一下。   

  

     

  

  volatile这个关键词在操作系统编程、硬件开发、嵌入式系统或者其他线程中更容易遇到。这个关键字本身就意味着它修改的变量是不稳定的,在运算过程中可能会被改成新的值。   

  

  我们的程序加载到内存,然后一些计算变量加载到缓存,最后我们去寄存器参与CPU的运算。过程大致是这样的。记住这个过程后,我们再来看看volatile关键字在哪个环节起什么作用。   

  

     

  

  让我们看看上面的代码。在外面编译代码的时候,我们的编译器会对我们的代码做一些优化。我们都知道计算机的惯性原理,我们往往不会为了计算速度而进行无用的运算。优化代码时,它发现B和C的值都等于A,所以我们执行的是int B=A;有时候,他会把A的值10从内存中取出,赋给b,这个没有错,但是在下一条语句中,它发现C也等于A,本来按照前面的流程,进内存取出A给C就够了,但是,编译器发现,在执行“int b=a”的时候,A已经取了一次,A的值没有变。所以,为了省事,它没有去内存取,只是在缓存里取出来。   

  

  Volatile关键字修饰后的代码   

  

     

  

  让我们再来看看这段代码。与前面的代码相比,我们在“int a=10”前面增加了volatile关键字。这个时候,我们来分析一下程序会如何运行;首先,当一个被声明为volatile的变量被编译时,它告诉编译器这个变量可能会在运行时突然发生变化,每次取的时候都要在内存中取。以至于编译器不会优化它,int b=a;且int c=a;当两次赋值时,它需要运行到内存中去获取a的值,这就保证了我们可以得到改变后的值,保证了程序不会出错。   

  

  一道面试题   

  

  Const表示不可变,volatile表示可变,那么如果两个关键字同时修改一个变量是什么意思呢?   

  

  例如const volatile int a=1;   

  

  首先const是指程序A不能修改变量A的值,但是程序B可能会修改变量A的值,恰好程序A在检测变量A,所以需要这两个关键字同时修改变量。   

  

  不知道大家对这个问题有没有其他的答案或者想法,可以在下面一起讨论交流!   

相关文章