当前位置: 技术问答>linux和unix
关于volatile的问题
来源: 互联网 发布时间:2016-06-11
本文导语: 写了这么一个程序来测试longjmp对于变量值的影响 按照书上说的,声明为volatile的变量的值应该不变(那句话本身就有点歧义,我也不知道是不是这么理解,所以写了这么一个程序),而一般int的值则是未定义的,大...
写了这么一个程序来测试longjmp对于变量值的影响
按照书上说的,声明为volatile的变量的值应该不变(那句话本身就有点歧义,我也不知道是不是这么理解,所以写了这么一个程序),而一般int的值则是未定义的,大家解释一下我的程序输出吧,说说volatile到底是什么语义?
#include
#include
#include
int main()
{
volatile int i = 5;
int j = 9;
jmp_buf jmp;
if(setjmp(jmp) == 0)
{
printf("set jumpn");
i++;j++;
printf("first: i = %d,j = %dn",i,j);
}
else
{
printf("now: i = %d,j = %dn",i,j);
return 1;
}
longjmp(jmp,1);
}
按照书上说的,声明为volatile的变量的值应该不变(那句话本身就有点歧义,我也不知道是不是这么理解,所以写了这么一个程序),而一般int的值则是未定义的,大家解释一下我的程序输出吧,说说volatile到底是什么语义?
#include
#include
#include
int main()
{
volatile int i = 5;
int j = 9;
jmp_buf jmp;
if(setjmp(jmp) == 0)
{
printf("set jumpn");
i++;j++;
printf("first: i = %d,j = %dn",i,j);
}
else
{
printf("now: i = %d,j = %dn",i,j);
return 1;
}
longjmp(jmp,1);
}
|
volatile 表示 告诉编译器 该变量 每次必须从内存中读 而不需优化 比如放在 寄存器里
比如
int a = 1;
while(a)
{
}
的代码
可能编译器生成的代码就是
while(1)
{
}
你的结果正常啊 有啥问题吗?
比如
int a = 1;
while(a)
{
}
的代码
可能编译器生成的代码就是
while(1)
{
}
你的结果正常啊 有啥问题吗?
|
使用volatile类型变量cpu会从内存中读出来 强制刷新。一般在嵌入式编程中用的多