修饰符之volatile

2016-12-02 12:53:01来源:网络收集作者:管理员人点击

作用: 避免被编译器优化

说起优化,一般有两个层级.一个是程序员对代码的优化,影响源代码的输出.另一个是编译器对代码的优化,影响可执行文件的输出.


下面说一下编译器对代码的优化


对代码块的优化
不修饰,会减少语句,什么的
修饰了之后,不会对语句块优化


对变量的优化
不修饰的话,第一次会从内存读取,之后会从寄存器中读取.
修饰后每次都必须从内存中读取.


应用环境
1. 硬件寄存器
2. 中断服务程序中修改的供其它程序检测的变量
3. 多线程应用中被几个任务共享的变量
问题
1. 一个参数既可以是const还可以是volatile吗?
可以,只读寄存器
2. 一个指针可以被volatile修饰吗?
可以,中断服务程序中修改的供其它程序检测的变量为指针时
3/下面的函数有什么问题
int square(volatile int *ptr)
{
return *ptr * *ptr;
}
这个函数不能实现一个数的平方.由于指针ptr被volatitle修饰,每次取变量要从内存取,取出来的值可能不一样.而这个函数是要实现一个数的平方,所以功能不能满足需求.

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台