R1S*_*S8K 1 c variables specifier
static volatile组合使用变量说明符有什么区别?或者单独使用一个;喜欢static或volatile在微控制器编程?
static - 在这种情况下,使变量仅在当前文件内可见
volatile - 它是编译器的信息,该对象可以被正常执行路径之外的东西(例如,中断例程)更改,并保证在任何使用之前读取该变量并在每次更改后写入该变量。 volatile(这是一个非常常见的误解)不保证其他任何东西 - 没有原子性,没有缓存一致性等,等等。
小智 8
这里提供了许多好的答案,但没有提及范围。
静态变量一旦初始化并随后在作用域内更改,它们将保留更改并且永远不会被销毁或再次初始化,尤其是在离开作用域时。除非代码中有规定,否则不会。您可以说,静态变量在生命周期方面类似于全局变量,但只能在其自己的范围内访问。
易失性部分倾向于强制执行从 RAM 中获取变量,而不是寄存器或闪存中的缓存副本。例如,假设在特定级别的优化设置下将特定代码提交给编译器。编译器不会假设变量附加任何其他条件,除非在变量不使用或超出其范围时清除它们。易失性本质上有双重用途,要么忽略编译器为该变量提供的优化,要么避免使用该变量的预取副本(RAM 中的副本除外)。
静态易失性是两种行为的组合,该变量在 RAM 中的持久性超出了任何优化。
潜在的应用领域:
静止的:
静态变量是指在所有实例之间共享的类变量。
易挥发的:
易失性变量是那些被读取和写入主存储器的变量。它们不存储在本地缓存中,并且始终从主内存中获取。
例如,两个线程使用,例如,private volatile int x;. 如果线程 A write(x) 和线程 B read(x),则两次都会从主内存写入和读取,而不使用线程的本地缓存。
静态易失性:
即使静态变量是共享变量,但在不同的线程中,线程的本地缓存中的静态变量可以有不同的值。为了使其对所有线程一致,只需将其声明为static volatile. 所以每次都会从主存中获取。
| 归档时间: |
|
| 查看次数: |
25067 次 |
| 最近记录: |