CPU缓存:区分缓存中的数据是地址(指针)还是值?

时间:2014-05-15 04:53:24

标签: caching memory assembly compiler-construction cpu

有没有办法知道存储在缓存中的数据是地址(即指针)还是实际值?

似乎有一种可能的方法是通过软件和编译器提示。但我不知道如何实现这一目标或其可行性的细节。任何人都可以给我一些建议或者给我一些参考资料吗?

否则,是否可以通过二进制位模式区分地址/值?这是一种值得信赖的方法吗?

非常感谢!!

1 个答案:

答案 0 :(得分:1)

CPU的缓存仅缓存数据。指针是数据(并且该数据恰好被代码解释为地址)。任何汇编语言程序员都可能告诉你(至少对于大多数CPU而言)CPU很乐意将整数或浮点数据视为一个地址(类型和类型检查主要只是编译器创建的错觉)。

现在考虑一个包含2个浮点值和2个指针数据的缓存行。 CPU不能缓存包含浮点数据的缓存行部分而不缓存包含指针数据的缓存行部分是不可行的;即使CPU知道缓存行中哪些类型的数据。