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

kla*_*yme 4 c hashtable shared-memory

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

Zan*_*ynx 5

在我的头顶,我不知道任何库这样做.

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

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

这假设您的哈希实现需要指针.如果他们只使用单值存储桶而没有值列表,则有些人不会.

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