zoukankan      html  css  js  c++  java
  • static、const、volatile

    static

    static,规定此局部变量只在当前模块(文件)中可见.,static规定其为静态存储方式,该变量允许被修改,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放;

    const

    const关键字可以修饰变量、对象、函数等

    只读的全局变量,只允许被初始化一次,其值不可修改.

    static const

    static和const的结合,只读的全局变量,只在当前模块(文件)中可见。

    volatile

    在介绍这个关键字之前,先介绍一些编译器的优化操作(relase):

    1、将内存变量缓存到寄存器,程序在后面需要使用该变量的时候,就从寄存器中取值

    2、调整指令顺序充分利用CPU指令流水线,常见的是重新排序读写指令。

     

    1、当变量值在本线程里改变时,会同时把变量的新值copy到该寄存器中,以便保持一致

    2、当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致

    volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。被声明的变量每次取值操作的时候,是从内存中取值,而不是从寄存器取值  

    使用场景

    1、中断服务程序中修改的供其它程序检测的变量,需要使用 volatile;

     2、多任务环境下各任务间共享的标志,应该加 volatile;

     3、存储器映射的硬件寄存器通常也要加 volatile 说明,因为每次对它的读写都可能由不同意义;

    重点介绍一下多线程下的volatile

    有些变量是用 volatile 关键字声明的。当两个线程都要用到某一个变量且该变量的值会被改变时,应该用 volatile 声明,

    该关键字的作用是防止优化编译器把变量从内存装入 CPU 寄存器中。如果变量被装入寄存器,那么两个线程有可能一个使用内存中的变量,

    一个使用寄存器中的变量,这会造成程序的错误执行。

    volatile 的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值

  • 相关阅读:
    asp.net 正则表达式
    字符串分隔
    用定时器实现逐渐放大层的功能
    js获取剪贴板内容
    使用无线网卡共享上网
    使用事件探查器跟踪sqlserver进程
    document.all.WebBrowser.ExecWB
    (转)JAVA与.NET DES加密解密
    web打印的实现
    关于div的定位
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12896808.html
Copyright © 2011-2022 走看看