C++ volatile 关键字

C++ volatile (只有release下才会生效)

1、告诉编译器volatile修饰的变量不要进行指令顺序的优化,以保证代码编写者的真实意图;

cpp 复制代码
	int a = 0;
	int b = 10;
	int c = 100;
	int* p = &a;
	p = &b;
	p = &c;
	如果不加volatile修饰 p , 编译器可能不执行p = &a;	p = &b;这两行,直接执行 p=&c;

2、每次都要从变量的实际内存进行读写,不要从寄存器或者缓存读写数据,以保证数据的正确性;

代码示例

cpp 复制代码
#include <iostream>
using namespace std;
int main()
{
	//volatile int i = 10;
	int i = 10;
	int a = i;
	cout << a << endl;
	_asm {
		mov dword ptr[ebp-4] , 80
	}
	int b = i;
	cout << b << endl;
}

不带volatile , 直接从寄存器读写数据,导致数据不正确,得到结果都是10

带volatile , 直接去变量真实地址读写数据,确保数据的正确性,结果正确

相关推荐
Rabitebla12 小时前
C++类和对象(中):默认函数 + 运算符重载 + 日期类实现完整笔记
java·开发语言·javascript
苕皮蓝牙土豆13 小时前
Qt图形视图框架入门:坐标系统与鼠标事件处理详解
c++·qt
Bat U13 小时前
JavaEE|多线程(一)
java·服务器·开发语言
逻辑驱动的ken13 小时前
Java高频面试考点场景题05
java·开发语言·深度学习·求职招聘·春招
Royzst13 小时前
String方法
java·开发语言
代码羊羊13 小时前
Rust基础类型与变量全解析
开发语言·后端·rust
众少成多积小致巨13 小时前
libbinder_ndk 入门指南
前端·c++·架构
纤纡.13 小时前
基于 PyQt5 的桌面应用开发实战:登录、预测、计算器、摄像头多功能系统
开发语言·人工智能·qt·计算机视觉
于慨13 小时前
flutter基础组件用法
开发语言·javascript·flutter
历程里程碑13 小时前
二叉树---翻转二叉树
开发语言·c++·elasticsearch·链表·搜索引擎·tornado·dash