@TrisH0x2A: 一个用25行C语言实现的哈希表,FNV-1a处理哈希,从固定值开始,将每个字节与一个素数异或并相乘……
摘要
一个简洁的哈希表实现,使用25行C语言,采用FNV-1a哈希和按位与进行高效的取模运算,通过void指针实现类型通用的存储。
查看缓存全文
缓存时间: 2026/06/25 05:19
一个25行C代码实现的哈希表
FNV-1a 负责哈希计算,从一个固定值开始,对每个字节进行异或,再乘以一个质数,如此重复。
有趣的部分在最后一行。
它没有使用 hash % cap,而是用了 hash & (cap - 1)。
当容量是2的幂时,结果相同。
而且按位与通常比取模运算开销更低。
另一个巧妙之处是使用了 void 指针来存储值。
哈希表不关心你存储的是什么类型。
整数、字符串、结构体,任何类型都可以。
调用者在存储和读取数据时负责类型转换。
相似文章
使用跳房子哈希的快速哈希映射和哈希集合的C++实现
hopscotch-map库是一个使用跳房子哈希的快速哈希映射和哈希集合的C++实现,在大多数情况下性能优于std::unordered_map。
SequenceHash:面向所有人的多重哈希方案
Trail of Bits 推出了 SequenceHash 和 SequenceMAC,这是一套开源的多重哈希(multihashing)构造方案,可与任何标准密码学哈希函数(SHA2、BLAKE、RIPEMD)配合使用,而不像 NIST 的 TupleHash 那样仅绑定于 Keccak。该规范已获 C2SP 批准,并随附 Rust、Go 和 Python 实现以及测试向量,旨在防止 Fiat-Shamir 变换等协议中因输入歧义而引发的攻击。
@msimoni:我为 Wasm GC 开发的新语言中的哈希表代码。它是完全静态的,所有类型都需手动编写(甚至没有泛型参数推断……)
一位开发者分享了一种为 WebAssembly GC 设计的新静态语言的哈希表代码,强调了手动类型要求以及使用玩具编译器获得的不错性能。
在 EQUALP 下对数字进行哈希运算的妙处
一篇关于在 ECL(Embedded Common Lisp)中优化 EQUALP 谓词下数字哈希运算的技术深度解析,涵盖全新的哈希表与哈希函数实现,显著提升了哈希表及泛型函数分派的性能。
切碎、存储、安全——哈希函数的故事
详细阐述哈希函数的历史和数学原理,从1956年Arnold Dumey为内存索引而发明的哈希函数,到现代密码学哈希,并包含Python实现。