对具有属性 "volatile" 的动态分配变量的内存访问是否会导致每次访问都未命中缓存?
Will a memory access to a dynamically allocated variable with attribute "volatile" cause cache misses for every access?
我的理解是“volatile”限定符表示编译器不缓存变量并在每次访问时从主内存中读取它。而且我相信处理器无法在不将内存放入缓存的情况下获取内存,请澄清谢谢
C 标准将其留给每个 C 实现来定义什么构成对易失性对象的访问。 C 2018 6.7.3 8 说:
… What constitutes an access to an object that has volatile-qualified type is implementation-defined.
在典型的 C 实现中,访问易失性对象需要加载或存储指令,因此只要 C 程序访问该对象,处理器就会访问内存。此外,缓存一致性通常由硬件提供,以便访问同一内存的其他线程或进程能够及时看到变化(即,以与程序语义一致的某种顺序),但细节各不相同。
由于访问是实现定义的,C 实现可以定义对 volatile 对象的访问以需要一些额外的内存同步,或者可以将其定义为无用的方式,仅访问编译器缓存的任何寄存器值。
我的理解是“volatile”限定符表示编译器不缓存变量并在每次访问时从主内存中读取它。而且我相信处理器无法在不将内存放入缓存的情况下获取内存,请澄清谢谢
C 标准将其留给每个 C 实现来定义什么构成对易失性对象的访问。 C 2018 6.7.3 8 说:
… What constitutes an access to an object that has volatile-qualified type is implementation-defined.
在典型的 C 实现中,访问易失性对象需要加载或存储指令,因此只要 C 程序访问该对象,处理器就会访问内存。此外,缓存一致性通常由硬件提供,以便访问同一内存的其他线程或进程能够及时看到变化(即,以与程序语义一致的某种顺序),但细节各不相同。
由于访问是实现定义的,C 实现可以定义对 volatile 对象的访问以需要一些额外的内存同步,或者可以将其定义为无用的方式,仅访问编译器缓存的任何寄存器值。