volatile关键字有什么作用- C语言面试宝典 - 黑马程序员教程

文章推薦指數: 80 %
投票人數:10人

黑马程序员教程前端面试宝典模块专注提供各类C语言开发面试题及答案,致力收集C语言 ... C/C++ Volatile变量,与非Volatile变量之间的操作,是可能被编译器交换顺序的。

学科分类学科分类Java工程师前端工程师Python工程师大数据工程师PHP工程师C/C++工程师目录C语言C++volatile关键字有什么作用虚函数的作用和实现原理,什么是虚函数,有什么作用?有了虚函数,为什么还需要纯虚函数struct和class有什么区别?指针和引用有什么区别`new/delete`和`malloc/free`之间有什么关系?C++中的内存分配有哪几种方式?多继承存在什么问题?如何消除多继承中的二义性?请简述一下你对智能指针的理解。

悬挂指针与野指针有什么区别?请用代码实现strcat()函数请看一下下面这段代码有什么问题。

请用简单的语言告诉我C++是什么在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”sizeof与strlen的区别?**将“引用”作为函数返回值类型的格式、好处和需要遵守的规则重载(overload)和重写(overried)的区别STL常用的容器有哪些以及各自的特点是什么数据结构Linuxvolatile关键字有什么作用Volatile关键词的第一个特性:易变性。

所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容,而是重新从内存中读取。

Volatile关键词的第二个特性:“不可优化”特性。

volatile告诉编译器,不要对我这个变量进行各种激进的优化,甚至将变量直接消除,保证程序员写在代码中的指令,一定会被执行。

Volatile关键词的第三个特性:”顺序性”,能够保证Volatile变量间的顺序性,编译器不会进行乱序优化。

C/C++Volatile变量,与非Volatile变量之间的操作,是可能被编译器交换顺序的。

C/C++Volatile变量间的操作,是不会被编译器交换顺序的。

哪怕将所有的变量全部都声明为volatile,哪怕杜绝了编译器的乱序优化,但是针对生成的汇编代码,CPU有可能仍旧会乱序执行指令,导致程序依赖的逻辑出错,volatile对此无能为力针对这个多线程的应用,真正正确的做法,是构建一个happens-before语义。

点击此处隐藏目录



請為這篇文章評分?