C++关键字volatile

来源:互联网 发布:air mac thea 编辑:程序博客网 时间:2024/05/16 05:14

http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html

这说明这个 volatile 关键字发挥了它的作用。其实不只是“内嵌汇编操纵栈”这种方式属于编译无法识别的变量改变,另外更多的可能是多线程并发访问共享变量时,一个线程改变了变量的值,怎样让改变后的值对其它线程 visible。一般说来,volatile用在如下的几个地方:
1) 中断服务程序中修改的供其它程序检测的变量需要加volatile;
2) 多任务环境下各任务间共享的标志应该加volatile;
3) 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;

#include <stdio.h>void main(){    int i = 10;    int a = i;    printf("i = %d", a);    // 下面汇编语句的作用就是改变内存中 i 的值    // 但是又不让编译器知道    __asm {        mov dword ptr [ebp-4], 20h    }    int b = i;    printf("i = %d", b);}

然后,在 Debug 版本模式运行程序,输出结果如下:

i = 10
i = 32
然后,在 Release 版本模式运行程序,输出结果如下:

i = 10
i = 10
这是链接的效果,实测。。。并没有区别,都是10…

原创粉丝点击