缓存由硬件透明地控制,因此如果我们在C程序中使用易失性变量,如何保证程序每次从指定的实际内存地址而不是缓存中读取数据?
我的理解是:
易失性关键字告诉编译器变量引用不应该被优化,并且应根据代码中编程的方式进行读取。
缓存由缓存硬件透明地控制,因此当处理器发出地址时,它不知道数据是来自缓存还是内存。
所以,如果我有一个要求必须每次读取内存地址,怎样才能确保它不是从缓存而是从需要的地址引用的?这两个概念似乎没有很好地契合。请说明如何做到这一点。
(想象一下,如果需要分析问题,我们有写回策略在缓存中)
谢谢, 微内核:)
volatile
的目的,在使用好的编译器时,应该是确保生成的代码在某个特定点之前让处理器知道需要写入的所有内容,并且在此之后不要求处理器读取信息。程序员还可能需要使用内部函数或其他手段来强制硬件缓存刷新,但如果编译器以硬件不知道的方式缓存寄存器,则强制硬件缓存刷新将是无用的。 - supercat