volatile
[ˈvɔlətail]
|
易变的, 反复无常的, 易激动的 |
典型的例子 :
for ( int i = 0; i < 100000; i++);
编译器肯定要把这个空循环语句优化掉,根本就不执行,结果是 i = 0;
如果写成
for ( volatile int i = 0; i < 100000; i++);
它就会执行了, 结果是 i = 100000;
---------------------------------------我是分隔线-----------------------------------------
补充:
“hcx_2008” 这位同学批评的很好,我没有说清楚,现在说一下我的运行环境和测试方法:
环境:vs2008 (release编译)
工程类型:win32
方法:计时
具体如下:在vs2008下“i”无法单独打印出来,但通过耗时能看出编译器在 release 编译后是否优化了某些东西。
int _tmain(int argc, _TCHAR* argv[])
{
// 初始化计时工具
double dbRet = 0.0f;
LARGE_INTEGER mliFrequency;
LARGE_INTEGER liCounterBegin;
LARGE_INTEGER liCounterEnd;
::QueryPerformanceFrequency(&mliFrequency);
::QueryPerformanceCounter(&liCounterBegin); //计时开始
for (int i = 0; i < 1000000000; i++);
::QueryPerformanceCounter(&liCounterEnd); //计时结束
// 输出被优化的运行时间,单位毫秒
dbRet = (double)(liCounterEnd.QuadPart - liCounterBegin.QuadPart) / (double)(mliFrequency.QuadPart) * 1000;
wprintf(_T("Optimized: %fms\n"), dbRet);
::QueryPerformanceCounter(&liCounterBegin); //计时开始
for (volatile int i = 0; i < 1000000000; i++);
::QueryPerformanceCounter(&liCounterEnd); //计时结束
// 输出未被优化的运行时间,单位毫秒
dbRet = (double)(liCounterEnd.QuadPart - liCounterBegin.QuadPart) / (double)(mliFrequency.QuadPart) * 1000;
wprintf(_T("Not Optimized: %fms\n"), dbRet);
return 0;
}
可以看到结果:
- 大小: 13 KB
分享到:
相关推荐
详细说明 并举例说明了VOlatile的作用及用法,特别是嵌入式程序员要注意的
一般对于volatile的解释是这样的:将变量定义为volatile可以防止编译器对变量进行优化,每次均从内存中访问变量,而不是寄存器。既然让编译器优化可以提高访问速度,那为什么又要不用它以及什么时候不用它?其实主要...
C语言中关键字volatile的作用,使用说明和例子
const,extern,static,volatile的使用
一般说来,volatile用在如下的几个地方: 1、中断服务程序中修改的供其它程序检测的变量需要加volatile; 2、多任务环境下各任务间共享的标志应该加volatile; 3、存储器映射的硬件寄存器通常也要加volatile说明,...
const和volatile分析 这个分析得很好 面试 找工作 必备的
volatile的用法讲解,讲得很详细,希望能帮助到大家
主要讲述java线程volatile关键字
C程序中volatile关键字的使用.方法及其例程介绍。
volatile与synchronized的区别,锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)
本文给大家介绍了单片机C语言中volatile的作用。
讲述了volatile_unsigned_int地址映射的使用说明。
宏定义volatile的用法,希望和大家共同学习进步。
Java并发编程:volatile关键字解析
volatile变量的使用是区分c程序员和嵌入式系统程序员的最基本问题。不懂得volatile变量的内容将带来灾难。这个文档帮助你减少因此带来的bug。
static,const,volatile用法的解析,对三项中全局变量和局部变量的区分,volatile中介绍了其具体用法 和一些区别,bong有例子
extern_volatile等修饰符的用法
volatile 的字面含义是易变的,那么将一个变量指示为volatile 是什么意思呢?是告诉编 译器这个变量是易变的?事实上也是如此。在多任务、中断等环境下,变量可能被其他的任 务改变,而编译器无法发现,volatile ...
本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通过深入分析能帮助我们正确的使用Volatile变量。
本篇文章主要介绍单片机中volatile定义的作用,感兴趣的朋友可以看看。