希望我的问题有意义: 在 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/