volatile关键字是用来防止编译器优化变量的那编译器优化变量是什么1.编译器为什么要优化变量一开始的变量都是存放在内存中的编译器会去判断变量并且将需要的变量赋值到cpu的数据寄存器中因为内存访问比cpu直接访问cpu中的寄存器速度慢很多放在寄存器中可以大幅加快读取速率。就比如// 普通变量int count 0;while (count 100) {count;}编译器会把count变量放到寄存器中可以进行快速读写2.volatile起到什么作用被volatile标记的变量不会被放到寄存器中说明cpu每次读取都必须从内存中读取变量。因为假设上面的count在寄存器中被cpu进行自增时如果有一个中断进行并且修改了内存中count的值但是寄存器中的count没有被修改寄存器中的count已经是错误的值了但是cpu还是用错误的值来计数。3.全部变量都放在cpu里面吗不是寄存器没那么大只会放部分编译器认为需要的。4.编译器依据什么进行判断该不该优化分两个方面一个是语法上是否支持放一个是放了该变量有没有对程序起到加速的作用。4.1如果变量在程序中会被取地址因为寄存器中没有地址所以该变量不会被优化。4.2变量是数组结构体这类大型连续内存数据不会被优化。4.3变量是比较大的数比如64位整数不会被优化。4.4被volatile修饰的变量。总结一下普通局部变量最容易进寄存器​全局/静态变量基本不会进寄存器​取过地址的变量永远不会进寄存器​数组/结构体永远不会进寄存器​volatile强制禁止寄存器优化​寄存器数量极少不是想放就能放当然编译器优化不只是指这一个方面。