这个程序有必要使用volatile变量吗?

ppgg1979 2003-11-13 12:12:05
小弟正在看BSP,遇到大量volatile,不解
程序如下:
void flush_cache()
{
volatile unsigned int i;
volatile unsigned int *a = (unsigned int*)0x80000000;
volatile unsigned int b;
for(i=0;i<2048;i++)
{
b = *a;
a++;
}
}

volatile是告诉编译程序,变量值有可能以未在程序中明确表达的方式改变。我知道a应该使用volatile,但i,b也定义成了volatile变量是什么原因呢?
...全文
75 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
短歌如风 2003-11-13
  • 打赏
  • 举报
回复
不需要,除非是为了降低速度(阻止优化)。
ckacka 2003-11-13
  • 打赏
  • 举报
回复
flush_cache
fierygnu 2003-11-13
  • 打赏
  • 举报
回复
虽然*a不是局部的,但编译器应该只会对a进行优化,放入寄存器,对它的值是不会做这个优化的。
短歌如风 2003-11-13
  • 打赏
  • 举报
回复
a的声明中的volatile是需要的。
注意volatile unsigned int * a的声明中,volatile类型的不是a而是*a,a虽然是局部的,但*a不是。
fierygnu 2003-11-13
  • 打赏
  • 举报
回复
因为是局部变量,所以i,a,b都不需要声明为volatile,因为这些值不可能以编译器未知的方式改变。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧