【发布时间】:2017-01-13 08:54:51
【问题描述】:
在从计算机体系结构中研究哈希数据结构和缓存内存时,我注意到它们非常相似。
除法哈希函数通过 hash(k) = k Mod (table size M) 计算索引,但我的 DS 书说 M 应该是素数或至少是奇数,因为如果 M 是偶数,结果是当 k 为偶数时总是偶数,当 k 是奇数时是奇数,所以应该避免偶数 M,因为你经常使用总是偶数的内存地址。
然而,我的 CA 书说对于直接映射缓存,您使用(块地址)Mod(缓存中的块数)并且结果索引看起来一致。为什么是这样?这一切都非常令人困惑,因为 MIPS 每 4 个字节使用 32 位地址,这是偶数。但我认为这是因为它们丢弃了最后 2 位,因为它们是字节偏移量?
而且,由于它使用(块地址)Mod(缓存中的块数),它使缓存大小为2的幂,因此您可以只使用块地址的低x位。
但是这个方法看起来和除法哈希函数完全一样,除了你使哈希表的幂为2,它是偶数(数据结构书说使用质数或奇数)并使用块地址的低位.
这是两种不同的方法吗?如果是这样,缓存的名称是什么?非常感谢您的回复。谢谢。
【问题讨论】:
标签: caching data-structures hash cpu-architecture