是否可以检查变量是否位于 L1/L2/L3 缓存中

Is it possible to check if a variable is located at L1/L2/L3 cache

众所周知,在现代计算机体系结构中,有L1/L2/L3个缓存,可以提高程序的执行性能。

我的问题是我们是否可以知道变量在执行时是否被加载到 L1/L2/L3 缓存中?

我们知道我们可以像这样在 C++ 中打印变量的地址:int i; cout << &i;。那么如果i加载到L1缓存中,&i显示的是哪种地址呢? L1缓存的地址还是RAM的地址?

在典型的 PC 中,&i 始终是 RAM 位置的地址。这是因为缓存对程序员来说本质上是透明的。它只是将内存区域中包含的相同信息的副本存储在 CPU 可以更快访问的位置。它不能作为内存位置直接寻址。

至于代码执行时变量是否'located'在缓存中,肯定是。当您尝试访问内存位置中的数据时,如果它不在缓存中,它将在您的请求得到服务之前先进入缓存。