您的位置:首页 >C++ volatile作用及防止编译器优化详解
发布于2026-01-09 阅读(0)
扫一扫,手机访问
volatile 告诉编译器变量值可能被程序外因素改变,禁止对其读写优化;主要用于内存映射I/O、信号处理全局变量、裸机多线程轮询三类场景,不保证原子性与内存序,不可替代 std::atomic。

volatile 告诉编译器:这个变量的值可能在**程序控制之外被改变**,别擅自优化对它的读写操作。
不是用来同步线程(那是 std::atomic 的事),而是应对以下真实硬件或系统级场景:
它强制每次访问都走真实内存路径:
下面代码中,sig_received 必须是 volatile,否则优化后可能永远不检查内存中的新值:
volatile sig_atomic_t sig_received = 0;void signal_handler(int) { sig_received = 1; }
int main() { signal(SIGINT, signal_handler); while (!sig_received) { / 等待 Ctrl+C / } printf("Got signal!\n"); }
这里用 sig_atomic_t(本身已隐含 volatile 语义)更标准,但原理一致:让编译器不敢跳过每次判断。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9