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 , 直接去变量真实地址读写数据,确保数据的正确性,结果正确

相关推荐
走粥5 小时前
使用indexOf查找对象结合Pinia持久化引发的问题
开发语言·前端·javascript
csbysj20206 小时前
Python break 语句详解
开发语言
轩情吖6 小时前
MySQL之用户管理
数据库·c++·后端·mysql·权限管理·用户管理
2401_857918296 小时前
C++中的访问者模式实战
开发语言·c++·算法
格林威6 小时前
工业相机图像高速存储(C++版):RAID 0 NVMe SSD 阵列暴力提速,附海康实战代码!
开发语言·c++·人工智能·数码相机·计算机视觉·工业相机·堡盟相机
elseif1236 小时前
CSP-S提高级大纲
开发语言·数据结构·c++·笔记·算法·大纲·考纲
波特率1152006 小时前
C++中类的const与static关键字修饰函数与变量辨析
开发语言·c++·
添尹6 小时前
Go语言基础之基本数据类型
开发语言·后端·golang
lightqjx6 小时前
【算法】前缀和
c++·算法·leetcode·前缀和
汉克老师7 小时前
GESP5级C++考试语法知识(七、链表(二)双链表)
c++·链表·双链表·gesp5级·gesp五级