知识补充(2)-volatile关键字

        今天做牛客的题库,遇到了c语言课上没有讲的关键字volatile,于是去学习了一下,并在此做总结方便之后的复习。

291f6f5a4f1443aaaf793501a2ccfd9d.jpg

        volatile是一种类型修饰符 可以用来防止变量在编译时被优化。

        我们知道内存访问速度不如寄存器与cache,在编译器编译时,会对程序进行优化,将经常访问的数据放在寄存器,从而加快访问速度,但这也带来了一些问题,如你的这个变量被修改了,程序还是会按照寄存器的数据执行而不是通过重新访问速度更慢的内存来获取数据。

        例如你有两个条件语句,一个是等于0执行,一个是等于1执行,你创建了一个全局变量值为1,编译器编译时会优化,只保留了等于1时的代码块,但是你的这个全局变量是可能被外部修改为0的。

        而volatile就可以提醒编译器,这个变量是会变的,在遇到与这个变量有关的操作时都要从内存中重新读取(例如当你将这个变量设为while循环判断条件时,每次while循环都要重新从内存读取数据并判断)。变量被修改的情况有:子进程对主进程的修改,中断函数对主函数的修改,对硬件寄存器进行修改等。

猜你喜欢

转载自blog.csdn.net/qq_59744114/article/details/128413741