具有可变数据类型的共享内存Hashmap

时间:2014-01-27 16:10:51

标签: c++ boost hashmap shared-memory boost-interprocess

我计划开发一个高性能的本地数据存储。

  • 多个进程应该能够将数据附加到该数据存储。
  • 数据从字符串的基本int值到字节数组(原始图像)不等。
  • 其他进程应该能够使用字符串标识符访问数据。
  • 访问应该是高性能的。应尽可能避免复制操作。

到目前为止我对解决方案的想法:

  • 使用boost :: interprocess
  • 来共享内存
  • 使用hashmap作为超级数据结构(boost :: unordered)
  • 所有想要与该数据存储通信的进程都使用dll,它实现了类似的功能
    • int getInt(字符串标识符)
    • void putInt(string identifier,int value)
    • void * getData(字符串标识符,int& length)
    • void putData(字符串标识符,void * data,int length)
  • 将使用dll中的互斥锁控制访问。
  • 指针是共享内存中的一个问题,因此boost具有offset_ptr的概念。

对我来说仍有疑问的是内存管理:

  • 是否可以将可变数据存储为散列图中的值?
    • 使用boost :: variant或boost :: any是否可以与boost :: interprocess和推荐使用?
    • 或者我应该定义一个自己的结构来存储数据。
  • 如何处理大小可变的数据(字节数组,原始图像)?
    • 这些数据是应该存储在共享内存的separte部分中,只有指针(offset_ptr)应该存储在hashmap中,还是这些数据可以存储在hashmap本身中?
    • 如果存储在单独的部分中,我是否必须自己组织这个单独的内存部分。是否有可用于组织内存部分的概念或库?
    • 如果hashmap可以直接保存这些原始数据,那么如果重新散列hashmap,这些原始数据的指针是否仍然有效?

欢迎任何建议。我来自java,所以内存管理对我来说非常复杂。提前谢谢。

0 个答案:

没有答案