zoukankan      html  css  js  c++  java
  • 关键字voltale

    ***volatile在多线程用的最多。***

    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
        for(volatile int i = 0 ; i < 99999999; i++)
        {
      
        }
    printf("天气真不错!");
    }

    1.可写内存是可以直接赋值,寄存器赋值,没有意义,cpu寄存器的刷新速度是很快的,赋值也许马上就被覆盖了,只有在内存中才能长久保存。

    2.debug模式下,会执行到条件不满足时,而release模式下(加上volatile关键字就不会了),就秒出,debug模式中会执行一下,而release跳过。

    • debug     调试模式
    • release    商业发行模式,会自动优化。

    2.空语句下,编译器自动优化,某些情况不是很听话

    3.int = 0; 编译器会把它自动优化为寄存器变量,然后寄存器检测到他里边是空语句,就会自动跳过不去执行。

    4.若想让它禁止优化,将 i 放在内存中,而不是cpu里的寄存器中。volatile

    volatile强化

    /*release模式,下面程序中如果不加wolatile,打印的结果会是10,10,若是加上了volatile就会变成10,32.*/
    
    #include <stdio.h>
    #inlcude <stdlib.h>
    
    int main()
    {
        volatile int i = 10;    //数据被意外改变的时候,强制读内存(如果不读内存,编译器会做一些优化,会让程序失误),
        int a = i;
        printf("
    i=%d", a);
        _asm    //属于汇编语言,改变i的值
        {
            move  dword ptr[ebp-4],20h    //i等于10,相当于栈底,栈底的指针是ebp,h代表16进制
        }
        int b = i;    //如果不加volatile,就是给a赋值时只读了一次内存中i的值,然后赋给a和b
        print(
    =%d, b);
    
        getchar();
    
    }
  • 相关阅读:
    Maven 那点事儿
    maven pom文件详解
    Maven Missing artifact jar
    JVM调优总结 -Xms -Xmx -Xmn -Xss
    LoadRunner做性能测试 从设计到分析执行
    linux内核参数注释与优化
    tcpdump详解
    [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解
    MSM--Memcached_Session_Manager介绍及使用
    黏性Session和非黏性Session
  • 原文地址:https://www.cnblogs.com/sjxbg/p/5573114.html
Copyright © 2011-2022 走看看