没有动态分配的哈希表/映射实现

Posted

技术标签:

【中文标题】没有动态分配的哈希表/映射实现【英文标题】:Hash table/map implementation without dynamic allocations 【发布时间】:2013-03-28 09:56:51 【问题描述】:

有人知道动态分配内存的 C/C++ 哈希表/映射实现吗?我正在开发一个没有标准库和堆的嵌入式系统(除非我想编写/移植一个)。

【问题讨论】:

找到一个嵌入式的堆分配实现不是比没有动态内存分配的哈希/映射更容易吗? 如果你总是可以按照完全相反的分配顺序释放分配的内存(例如alloc a,b,cfree c,b,a),你的内存/堆管理器可以像几十行一样简单实现堆栈数据结构的代码。 实现堆可能更容易,但如果这是我唯一需要的,它可能不是。堆栈内存存储意味着我不能乱序删除项目,这可能是个问题。 【参考方案1】:

您要查找的术语是“开放式寻址”或“封闭式哈希”。 见http://en.wikibooks.org/wiki/Data_Structures/Hash_Tables#Open_addressing 和http://en.wikipedia.org/wiki/Open_addressing

但不知道具体的实现。对不起。

【讨论】:

虽然链接不错,但它们可能会有所帮助。 实际上,那篇文章中的漂亮图片让我意识到,如果我从节点存储(可能只是一个静态数组)中实现一个空闲列表,我也可以进行链接。但我确实喜欢线性探测开放寻址的缓存一致性。

以上是关于没有动态分配的哈希表/映射实现的主要内容,如果未能解决你的问题,请参考以下文章

散列集实现使用动态分配的链接列表实现数组

在ansible中动态地将哈希类型分配给password_hash()

C++ class实现动态分配的顺序表(完整代码)

数据结构线性表的动态分配顺序存储结构算法c语言具体实现和算法时间复杂度分析

使用动态端口分配的反向 SSH 隧道

静态链表和动态链表的区别