C++——volatile

正常情况下当发送信号时,程序就会结束,但如果在编译时加入优化选项如-O1,-O2...就不会退出。

但是因为flag的修改是在信号处理函数中修改的而不是main函数,编译器判定flag在循环中没有被修改,因此做出了优化,每次判断!flag时不再把flag从内存中读取到cpu寄存器进行判断,而是直接编译指令为:读取寄存器原来的值进行判断。


而volatile声明的变量,保证每次都会被从内存中拿取而不被优化(即使编译时加了优化选项)****。

相关推荐
庞轩px3 天前
线程本地缓存?CPU缓存!
缓存·线程·cpu·volatile·可见性·本地内存
星原望野5 天前
java:volatile关键字的作用
java·开发语言·volatile
一叶飘零_sweeeet1 个月前
volatile 关键字深度拆解:从内存屏障底层到单例模式的工业级架构设计
单例模式·volatile
时光の尘1 个月前
嵌入式面试八股文(二十)·C语言关键字相关知识点速通(static、const、volatile、struct、enum、union)
c语言·const·static·union·volatile·struct·enum
_OP_CHEN2 个月前
【Linux系统编程】(三十八)进程信号拓展:可重入函数 /volatile/SIGCHLD 全解析
linux·运维·进程·c/c++·信号·可重入函数·volatile
MR_Promethus2 个月前
【C++11】volatile 关键字
开发语言·c++·volatile
C雨后彩虹3 个月前
volatile 实战应用篇 —— 典型场景
java·多线程·并发·volatile
小毅&Nora3 个月前
【Java线程安全实战】⑬ volatile的奥秘:从“共享冰箱“到内存可见性的终极解析
java·多线程·volatile
没有bug.的程序员3 个月前
Java内存模型(JMM)深度解析:从 volatile 到 happens-before 的底层机制
java·开发语言·并发编程·volatile·内存模型·jmm·happens-before