volatile关键字学习
来源:互联网 发布:mac 3d建模软件 编辑:程序博客网 时间:2024/04/28 07:08
用volatile关键字修饰变量时,会告诉编译器不要进行优化,将变量的值缓存在寄存器里,
而是每次使用时都要从变量存储位置重新读取,这可以防止该变量在未知的地方和时候可能被改变。
这对于多线程共享的变量等很重要。
看下面的例子:
int main()
{
int i = 10; //未加关键字volatile
int a = i;
printf("i = %d", a);
__asm{
mov dword ptr[ebp - 4], 20h
}
int b = i;
printf("i = %d", b);
return 0;
}
结果a = 10,b = 10
汇编代码:
00401000 push esi
00401001 mov esi,dword ptr [__imp__printf (4020A0h)]
00401007 push 0Ah
00401009 push offset string "i = %d" (4020F4h)
0040100E call esi
00401010 add esp,8
00401013 mov dword ptr [ebp-4],20h
0040101A push 0Ah
0040101C push offset string "i = %d" (4020F4h)
00401021 call esi
00401023 add esp,8
00401026 xor eax,eax
00401028 pop esi
00401029 ret
int main()
{
volatile int i = 10; //加关键字volatile
int a = i;
printf("i = %d", a);
__asm{
mov dword ptr[ebp - 4], 20h
}
int b = i;
printf("i = %d", b);
return 0;
}
结果a = 10,b = 32
汇编代码:
00401000 push ebp
00401001 mov ebp,esp
00401003 push ecx
00401004 push esi
00401005 mov esi,dword ptr [__imp__printf (4020A0h)]
0040100B mov dword ptr [i],0Ah
00401012 mov eax,dword ptr [i]
00401015 push eax
00401016 push offset string "i = %d" (4020F4h)
0040101B call esi
0040101D add esp,8
00401020 mov dword ptr [i],20h
00401027 mov eax,dword ptr [i]
0040102A push eax
0040102B push offset string "i = %d" (4020F4h)
00401030 call esi
00401032 add esp,8
00401035 xor eax,eax
00401037 pop esi
00401038 mov esp,ebp
0040103A pop ebp
0040103B ret
- Volatile关键字的学习
- volatile关键字学习
- volatile关键字后续学习
- 深入学习volatile关键字
- 学习volatile关键字
- volatile关键字学习总结
- 学习C中volatile关键字
- java学习之关键字volatile
- java之volatile关键字学习
- 线程学习四:volatile 关键字
- 每日学习20170302--volatile关键字
- 学习笔记:volatile关键字总结
- C语言知识点学习之volatile关键字
- Java中volatile关键字学习笔记
- java中volatile关键字---学习笔记
- C语言再学习 -- 关键字volatile
- C++ volatile 关键字学习及使用
- java中volatile关键字深入学习
- Minix文件系统概述
- VC6,SDI视图改变背景颜色的方法
- C#内存泄漏 非托管堆内存泄漏
- 手机支付:本土技术为何遭唾弃?
- C++著名程序库的比较和学习经验
- volatile关键字学习
- Resources on the Internet
- 从源码编译CELayoutEditor-0.7.1
- 基于JS对Json对象前台排序,只访问一次数据库。
- 数据中间平台(php,mysql,redis)
- 简明 Python 编程规范
- 做研究,写论文
- ComboBox只接受数字,并限制数字范围
- 23. android dialog——自定义对话框之三(带style的)