1. Volatile
提醒编译器它后面所定义的变量随时都可能改变,因此编译后的程序每次需要存储或读取该变量时,都从变量地址中读取数据。
Volatile的作用:
(1) 阻止编译器为了提高速度将一个变量缓存到寄存器内不写回
(2) 阻止编译器调整操作volatile变量的指令顺序
但是volatile能够阻止编译器调整顺序,也无法阻止CPU动态调度换序,例如:
解决方法:barrier(): 优化内存屏障(联系到内核同步机制)
https://blog.youkuaiyun.com/benpaobagzb/article/details/51050633
Barrier I/O:硬件级别的同步
应用场景:
(1) 中断服务程序中修改的供其他程序检测的变量
(2) 多任务环境下个任务见共享的标志
(3) 存储器映射的硬件存储器
2.static的用法(区分C语言和C++,两种语言下作用有所不同)。
在C语言中,static的用法:
(1) 在函数体,一个被声明为静态的变量在函数调用过程中值不变
(2) 在模块内(函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其他函数访问,他是一个本地全局变量
(3) 在模块内,一个被声明为静态的函数只能被该模块内其他函数调用
在C++中,static的用法:
类的静态成员或方法不属于类实例,而属于类本身,并在所有实例间共享,调用时应用类名+::来引用
3. const关键字的作用
与define相比,const内存效率更高,编译器通常将const 变量保存在符号表中,而不会分配存储空间,这使得它成为一个编译期间的常量,没有存储和读取的操作
4.Explicit的作用
防止执行隐式类型转换
5. 四大转型操作符
static