我有一个想法,指针的地址在缓存时可能会改变,但看起来这不起作用。
您可能误解了缓存的工作原理。缓存是一个单独的内存,是的,它有自己的地址,但是当 CPU 从 RAM 缓存内存行时,它会记录内存所在的 RAM 地址,并在 RAM 地址和缓存之间保持映射-地址。从你的程序来看,地址是一样的。如果您的程序需要一个地址,并且 CPU 在映射中看到该地址(缓存命中,成功),则 CPU 会即时转换地址并从缓存而不是从 RAM 中获取数据。
有没有办法确定我请求的内存是否被缓存?
从高级语言(如 C)来看,没有没有。操作系统理论上可以(取决于 CPU 架构)找出地址是否被缓存,但这不是你可以依赖 C 的任何东西。
请参阅我可以检查一块内存(例如,使用 malloc 分配的)是否留在缓存中?