@TrisH0x2A: 一个用25行C语言实现的哈希表,FNV-1a处理哈希,从固定值开始,将每个字节与一个素数异或并相乘……

X AI KOLs Timeline 工具

摘要

一个简洁的哈希表实现,使用25行C语言,采用FNV-1a哈希和按位与进行高效的取模运算,通过void指针实现类型通用的存储。

一个用25行C语言实现的哈希表 FNV-1a处理哈希:从一个固定值开始,将每个字节与一个素数异或并相乘,重复此过程。 有趣的是最后一行: 它使用 hash & (cap - 1) 而不是 hash % cap。 当容量是2的幂时,结果相同, 而按位与通常比取模运算更高效。 另一个巧妙的细节是使用void指针存储值: 哈希表不关心你存储什么类型, 整数、字符串、结构体,任何类型都可以。 调用者在存储和检索数据时自行处理类型转换。
查看原文
查看缓存全文

缓存时间: 2026/06/25 05:19

一个25行C代码实现的哈希表

FNV-1a 负责哈希计算,从一个固定值开始,对每个字节进行异或,再乘以一个质数,如此重复。

有趣的部分在最后一行。

它没有使用 hash % cap,而是用了 hash & (cap - 1)。

当容量是2的幂时,结果相同。

而且按位与通常比取模运算开销更低。

另一个巧妙之处是使用了 void 指针来存储值。

哈希表不关心你存储的是什么类型。

整数、字符串、结构体,任何类型都可以。

调用者在存储和读取数据时负责类型转换。

相似文章

SequenceHash:面向所有人的多重哈希方案

Lobsters Hottest

Trail of Bits 推出了 SequenceHash 和 SequenceMAC,这是一套开源的多重哈希(multihashing)构造方案,可与任何标准密码学哈希函数(SHA2、BLAKE、RIPEMD)配合使用,而不像 NIST 的 TupleHash 那样仅绑定于 Keccak。该规范已获 C2SP 批准,并随附 Rust、Go 和 Python 实现以及测试向量,旨在防止 Fiat-Shamir 变换等协议中因输入歧义而引发的攻击。

在 EQUALP 下对数字进行哈希运算的妙处

Lobsters Hottest

一篇关于在 ECL(Embedded Common Lisp)中优化 EQUALP 谓词下数字哈希运算的技术深度解析,涵盖全新的哈希表与哈希函数实现,显著提升了哈希表及泛型函数分派的性能。