@TrisH0x2A: 一个用25行C语言实现的哈希表,FNV-1a处理哈希,从固定值开始,将每个字节与一个素数异或并相乘……
摘要
一个简洁的哈希表实现,使用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 指针来存储值。
哈希表不关心你存储的是什么类型。
整数、字符串、结构体,任何类型都可以。
调用者在存储和读取数据时负责类型转换。
相似文章
切碎、存储、安全——哈希函数的故事
详细阐述哈希函数的历史和数学原理,从1956年Arnold Dumey为内存索引而发明的哈希函数,到现代密码学哈希,并包含Python实现。
值编号
本文解释了值编号,一种编译器优化技术,用于识别相同的计算以避免冗余,基于静态单赋值(SSA)形式,并使用哈希合并进行高效比较。
每个字节都很重要
本文通过Java和C语言的示例,阐述了理解CPU缓存行与数据结构布局对编程性能优化的重要性,讨论了多余字节的开销以及结构体数组与数组结构体之间的权衡。
Qwen3.6-27B 各量化格式 KLD 对比:INT 与 NVFP
Reddit 帖子对比了 Qwen3.6-27B 的多种量化版本(INT4、NVFP4、BF16-INT4),展示不同场景下内存占用与精度的权衡。
NVFP4 + MTP - 现已登陆 llama.cpp
NVFP4 量化和 Multi-Token Prediction 支持已添加到 llama.cpp 的 b9297 版本中。