Kisser Leon
这个kisser不太冷
posts - 100, comments - 102, trackbacks - 0, articles - 0
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2007年3月
>
日
一
二
三
四
五
六
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(9)
给我留言
查看公开留言
查看私人留言
随笔分类
(102)
Algorithm(5)
C++(13)
English(5)
gAme(5)
IT(43)
JOKE(9)
随感(22)
随笔档案
(100)
2010年4月 (3)
2008年12月 (1)
2007年11月 (3)
2007年10月 (1)
2007年6月 (2)
2007年5月 (5)
2007年4月 (31)
2007年3月 (54)
积分与排名
积分 - 136732
排名 - 185
最新评论
1. re: c++中嵌入python入门1
评论内容较长,点击标题查看
--lll
2. re: c++中嵌入python入门1
test.py文件放到哪里呢
--lll
3. re: python与c++交互学习入门之5
正在学习中,mark一下
--毕达哥拉斯半圆
4. re: 链接器都干了些什么?
好文章,两天看了两遍,转载了
--天堂左我往右
5. re: python与c++交互学习入门之5
作者还在不????
--金刚
阅读排行榜
1. Rational Rose 2003下载地址(10089)
2. 链接器都干了些什么?(9725)
3. c++中嵌入python入门1(9330)
4. c++中嵌入python入门4 之 Boost.Python(6674)
5. c++中嵌入python入门2(5810)
评论排行榜
1. Rational Rose 2003下载地址(16)
2. 多线程学习中碰到的一个很有意思的问题 (11)
3. python与c++交互学习入门之5(7)
4. c++ volatile关键字(7)
5. c++中嵌入python入门1(6)
c++ volatile关键字
Posted on 2010-04-01 10:54
kk
阅读(2907)
评论(7)
编辑
收藏
引用
所属分类:
C++
c++中的volatile关键字一直没有使用过。最近使用了一下。该关键字的意思就是告诉编译器不要对该变量进行优化,使用地址对该变量进行取值而不要直接使用该变量已经存在cach/寄存器中的值。
测试代码如下:
1
//
volatile.cpp : Defines the entry point for the console application.
2
//
3
4
#include
"
stdafx.h
"
5
6
7
int
_tmain(
int
argc, _TCHAR
*
argv[])
8
{
9
//
volatile int a = 1;
10
int
a
=
1
;
11
printf (
"
a = %d\n
"
, a);
12
13
__asm
14
{
15
mov DWORD ptr [ebp
-
4
], 10h // 修改a的值为0x10
16
}
17
18
printf (
"
a = %d\n
"
, a);
19
20
getchar();
21
22
return
0
;
23
}
24
25
如果编译器没有优化的话,打印出来的值应该是1和16。反之,如果没有使用volatile,优化之后应该打印出来的是1和1
我在vc6和vc2008下测试了一下:
-----------------------------------------------------------------------------------------
vc2008
-----------------------------------------------------------------------------------------
没有关键字volatile
debug下打印的是 1 和 1 ---为什么会被优化了呢?我的优化编译选项是disabled的
release下打印的是 1 和 1
有关键字volatile
debug下打印的是 1 和 1 --- 很奇怪!
release下打印的是 1 和 16
我想可能是编译器对debug下作了特殊处理。而且该程序非常简单
vc6.0
-----------------------------------------------------------------------------------------
没有关键字volatile
debug下打印的是 1 和 16
release下打印的是 1 和 1
有关键字volatile
debug下打印的是 1 和 16
release下打印的是 1 和 1 --- 很奇怪!
小结:
在多线程多核的情况下,要防止被编译器优化!
Feedback
#
re: c++ volatile关键字
回复
更多评论
2010-04-01 12:18 by
过客
谁懂的来解释下啊
#
re: c++ volatile关键字[未登录]
回复
更多评论
2010-04-01 14:20 by
Jerry
mov DWORD ptr [ebp-4], 10h // 修改a的值为0x10
a地址有错误
#
re: c++ volatile关键字
回复
更多评论
2010-04-02 19:03 by
飞鸽传书
几乎不要用的这个功能。
#
re: c++ volatile关键字
回复
更多评论
2010-04-06 11:07 by
Lo
应该用
__asm
{
lea eax, a
mov dword ptr [eax], 0x10
}
要不然 debug 出错的机率太高了
#
re: c++ volatile关键字[未登录]
回复
更多评论
2010-04-08 16:25 by
我
to Lo
谢谢!
通过lea获取的地址肯定是对的。用你的办法在2008下试了一下,没有volatile输出都是1和16,也就是说编译器没有优化----可能是例子太简单了
使用了volatile,也都是1和16----这个是必须要保证的
#
re: c++ volatile关键字
回复
更多评论
2010-05-22 16:15 by
啊
你那样取到的a的地址不对
微软在栈中可能还放了其他的临时变量
推荐这个
__asm
{
lea eax, a
mov dword ptr [eax], 0x10
}
#
re: c++ volatile关键字
回复
更多评论
2012-04-18 11:49 by
fans
愚蠢总有愚蠢的解释。
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
c++ volatile关键字
环形缓冲
python与c++交互学习入门之5
c++中嵌入python入门4 之 Boost.Python
c++中嵌入python入门3
c++中嵌入python入门2
c++中嵌入python入门1
认识理解volatile关键字
链接器都干了些什么?
C++编译选项学习
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © kk