c 将哈希表放入共享内存段

标签 c hashtable shared-memory

希望我的问题有意义: 在 C 中编程,我可以在共享内存段中创建哈希表,以便任何具有适当权限的进程都可以访问其中的键/值吗? 如果是这样,我如何在创建哈希表时指定我希望它放入 SHM 中? 是否有任何推荐的哈希表实现允许这样做? 非常感谢

最佳答案

在我的脑海中,我不知道有任何库可以做到这一点。

我确实知道,如果您编写自己的库或修改现有的库,您需要做的一件棘手的事情是追踪并修复任何使用指针的代码,并将其替换为使用 base + offset 的代码。

基数是共享内存创建/打开函数返回的指针,它在每个进程中都不同。偏移量取代了指针。当您需要通过偏移量定位一个值时,您将 base 转换为 char*,将偏移量添加到它,然后将其转换为 your_type*。类似于 (bucket_t*)((char*)base + offset)

这是假设您的哈希实现完全需要指针。如果有些人只使用单值桶而不使用值列表,则不会这样做。

另一个棘手的事情是你需要自己管理内存。您可以创建自己的函数,而不是调用 malloc(),可以将其命名为 shm_hash_alloc()。一个快速的开始是只保留一个指针并在分配内存时递增它,不要费心释放它。稍后您可以使用一个指针数组(偏移量)来释放两种大小的各种幂的列表,或者如果您知道您的对象类型,则可以使用每种类型的列表。在每个空闲 block 中,您存储指向下一个空闲 block 的指针,并且您知道它的大小,因为它位于哪个列表中。甚至还有更高级的方法,但您可能不需要它们。

关于c 将哈希表放入共享内存段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5384218/

相关文章:

c - 共享内存段中的链表

python - 具有只读共享内存的 Python 中的多处理?

C: 返回 char 数组变成垃圾

c - C 中数组元素递增

java - 简单的哈希函数技术

c - 当所有元素都被覆盖时,我的链表数组实现有什么问题?

c++ - 与 boost::interprocess 共享内存时从 std::string 转换为 "MyShmString"

c - 如何从C中的字符串中提取特定字符(http响应)

c - 了解并行线程执行

python - 哈希表和 Python 字典有什么区别?