c - 为什么我的程序在增加哈希表的大小时变慢

标签 c hashtable

我正在使用 murmur hash 在哈希表中存储 150,000 个单词 我正在使用线性探测来解决程序中的冲突。我想如果我的hashtable的size很大,那么就会有大量的空闲空间,不用我去探查半天。但是奇怪的事情发生了。当哈希表的大小为 250,000 时,我获得了最快的运行时间。之后运行时间增加。为什么会这样?

最佳答案

虽然 Robert 涵盖了一般性问题(局部性),但问题可能是空间局部性

当你有一个较小的哈希表时,它适合缓存。当您有一个非常大的哈希表时,每次查找都存在页面错误的高风险。如果您出现页面错误,那么您的操作系统需要暂停执行,直到内存管理单元可以将 block 从较慢的访问内存复制到更靠近 CPU 的缓存。

在极端情况下,较慢的访问内存甚至可能是操作系统提供的磁盘资源。

关于c - 为什么我的程序在增加哈希表的大小时变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25272071/

相关文章:

c - uthash:2级哈希表,在嵌套表中添加新元素

c中socket编程的客户端服务器进程执行

c++ - 在 C 和 C++ 中不使用 extern 的不同编译结果

powershell - 在 Oneliner 中的 ConvertFrom-StringData 之后删除重复项

c++ - 数据正确放入数组但打印数组时不存在

java - 如何在具有特定索引的哈希表中创建链表?

c - 类型转换为 char* 的空指针

C/Bison语法错误

c++ - 如何在没有标准 C 库的情况下使用编译器内置函数

scala - Scala 中的 mutable.HashTable 类