auto register volatile 比较总结
1) auto
auto变量就是局部变量,一般不用加auto。自动的意思是自动作用域,自动离开作用域。
2) register
register变量是提示编译器尽量放在寄存器中保存,以增加
速度。
- 只能定义局部的register变量,或者作为函数参数,没有全局或静态的。
- 在C语言中,是不能对register变量取地址的,因为它没有虚地址,在寄存器里。而C++中,它是可以取址的,这时,C++编译器不会把它放到寄存器里。
(todo测试)
- 一般不建议使用register,相信编译器能够做的更好。
3) volatile
- volatile变量
告诉编译器,别对这个变量做任何优化,因为它随时都会改变。
比如,多线程中,共同访问一个变量,如果编译器对其优化(放在寄存器中是优化的一种),第二次读时可能直接读寄存器中的值,而另外一个线程(或中断)改了变量,结果读出来的值是旧的。
它和const/register是类相反的,const是告诉编译器这是不可改变的,可以优化。而register直接告诉编译器将变量存入寄存器中。