打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
你了解C语言中的关键字volatile吗?

       我们在学习C语言的32个关键字时,大家都不太注意volatile这个关键字,volatile是一个类型修饰符。volatile的中文意思是“易变的”。那么在程序中我们在什么情况下才使用他呢?我们在分析内核时经常看到这个关键字的使用。举例如下:

struct task_struct {        volatile long state;    /* -1 unrunnable, 0 runnable, >0 stopped */        void *stack;        atomic_t usage;        unsigned int flags;     /* per process flags, defined below */        unsigned int ptrace;.......


       在应用程序中,volatile主要是被设计用来修饰被不同线程访问和修改的变量。

       volatile的变量是说这变量可能会被意想不到地改变,因此编译器不要进行相应的优化。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

      例如:

      extern int a;//语句1  假设a是一个全局变量

     ......

      int b=a; //语句2

      int c=a;  //语句3

 

      语句2与语句3中都使用了a的值,优化器在语句3中引用a的值时,认为语句2中已经将a的值读到寄存器中了,并且在语句2与语句3之间没有对a进行修改,因此没必要再到内存中去读a的值,所以直接使用了寄存器中的值。但是如果在语句3执行前,产生了中断,中断恰好对a进行了修改。那么语句3取出来的值就有问题了。

      如果上面的全局变量a是被修饰为volatile的话,那么优化器就不能去优化语句3,要到内存中去重新取值。

 

     作为嵌入式系统程序员,volatile一定要知道如何使用。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C语言中关键字volatile追根问底
详细解释 volatile
C语言中volatile关键字-学院-黑基网
C语言丨深入理解volatile关键字
C语言中volatile关键字的作用
C/C++关键词 - volatile
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服