首页 > 其他分享 >Volatile(编译优化阶段)

Volatile(编译优化阶段)

时间:2023-11-23 16:00:50浏览次数:45  
标签:变量 取值 编译 编译器 Volatile 内存 寄存器 优化

作用:告诉编译器该变量是容易发生变化的,不能对该变量进行优化,每次取值都必须从内存中取值而不是直接去取之前在寄存器中的值
例子:
Volatile int a=20,b,c;
b=a;
C=a;
代码执行流程如下;
B=a;先从a的内存中取值存放到寄存器,再把寄存器的值给存到b的内存
C=a;把寄存器的值给存到b的内存
可以看出编译器对c=a这步进行优化,不再执行从a的内存中取值,而是直接从寄存器中取值,如果这段时间内a的发生变化,那么c就不能得到最新的值,这个时候就需要使用volatile告诉编译器,不要对变量a优化,每次都是从内存中取a的值
常见场景:
1)多线程使用共享变量:因为多线程是多核操作,同时进行
2)中断:中断程序会修改其他程序中使用的变量
3)硬件寄存器:因为寄存器随时会被修改,好比AD转换的寄存器,随时会因 为电压变化而修改
4)外部任务会修改变量

标签:变量,取值,编译,编译器,Volatile,内存,寄存器,优化
From: https://www.cnblogs.com/Casdfgh/p/17851764.html

相关文章

  • C++程序编译常见错误与评测各个状态含义
    编译常见错误提示1.[Error]expected';'before'cout'。在cout前面,缺少一个分号。2.[Error]'b'wasnotdeclaredinthisscope。未定义变量名b。3.[Error]stray'\243'inprogram\stray'\273'inprogram。不可识别的非法字符。4.[Error]ldretu......
  • 使用 MSYS2+MinGW 编译win程序
    在跨平台开发场景下,MinGW为那些习惯于使用GNU工具(例如gcc、gdb、make等)的开发者提供了一个便利:它允许他们在Windows平台上使用相同的工具链。这种做法有助于保持在不同操作系统间的开发一致性。此外,当某个应用依赖于Unix系统下的特定库,而这些库在Windows下没有直接的替代品时,MSYS2......
  • bytenode nodejs 字节码编译工具
    bytenode是一个nodejs字节码编译工具,可以用来实现nodejs代码的一些加密简单使用安装目前推荐安装为cli全局模式,我使用npmscript不成功 sudonpminstall-gbytenode简单代码app.js定义一个模块 module.exports={name:"dalong",age:333}编译bytenode--compileapp.j......
  • 大规模神经网络优化:神经网络损失空间“长”什么样?
    前言 如何刻画网络的优化性质呢?在优化相关的论文中,通常通过分析Hessian矩阵及其特征值,或者将损失函数进行一维或二维的可视化来分析网络的优化性质。我们希望这些指标能够帮助我们更好的理解网络损失的landscape,优化器优化轨迹的性质等等。我们希望将这些指标刻画的性质与优化......
  • obproxy 源码编译以及一些问题整理-暂未编译成功
    尝试自己编译下oceanbase的obproxy并记录下一些问题,目前是暂未编译成功,因为是openssl版本包的问题环境说明基于了RockyLinuxrelease8.8,同时obproxy使用了4.2.1版本的构建参考命令这个官方已经提供了,主要就是initdebug,makeshbuild.shinitshbuild.sh......
  • python编译成可执行文件
    安装pipinstallpyinstaller执行pyinstaller--onefilexxxxx.py会在当前文件的同级目录生成dist文件夹,可执行文件就在里面......
  • openharmonyOS 编译报错:ERROR: Failed :entry:default@LegacyCompileResource
    解决方法:把build包删除,让系统重新生成......
  • 编译栈存储
    总结1.入栈时是从高地址到低地址。2.对函数进行编译时,形式参数和实在参数的存储方式不同,形参是顺序存储,从低地址到高地址,而实参是逆序存储,从高地址向低地址存储。3.数据入栈时,会提升数据类型。如图。若数据是短整型,会提升到长整型;若是浮点型,则会提升到双精度型。4.栈中,高地......
  • 斯坦福大学引入FlashFFTConv来优化机器学习中长序列的FFT卷积
    斯坦福大学的FlashFFTConv优化了扩展序列的快速傅里叶变换(FFT)卷积。该方法引入Monarch分解,在FLOP和I/O成本之间取得平衡,提高模型质量和效率。并且优于PyTorch和FlashAttention-v2。它可以处理更长的序列,并在人工智能应用程序中打开新的可能性。处理长序列的效率一直是机器学习......
  • SQL优化
    1、用join连接代替子查询,尽量避免使用子查询2、只返回必要的列,用具体的字段名代替select*语句3、如果对groupby语句的结果没有排序要求,要在语句后面加orderbynull(group默认会排序)4、尽量使用where子句代替having子句(where是先过滤,having是后过滤)  参考文章【1】htt......