在共享内存中保留固定大小的符号

我一直在研究一些需要我存储符号列表和相应计数的东西,它们被存储为字符串,int映射。 问题是输入大小约为32 MB但是当我尝试将其存储在内存中时,大小膨胀到1.4Gb,我经历了一些链接,发现std :: string占用了相当多的内存用于簿记和很可能导致膨胀,所以我进一步看了一下,发现可以使用boost :: array,其大小等于符号的最大大小,因为boost数组不做任何书籍保持它没有导致记忆臃肿。 但是,我希望将这个boost数组放在共享内存中,就像map<boost::array ,int>。我看了一下boost :: array文档,发现它不支持allocators ,目前我使用boost的分配器和段管理器如下:

 typedef bip::allocator CharAllocator; typedef bip::basic_string<char, std::char_traits, CharAllocator> SharedString; 

我也遇到了这个链接,这似乎解释了很多: http : //jovislab.com/blog/?p = 89

有没有办法做到这一点,我有什么其他选择。 我不是在寻找完整的解决方案,而是提示。 谢谢,Deb!

适当的提示是:

  • 使用连续分配
  • 预先保留

这个答案包含了对Boost managed_shared_memory的不同分配技术的良好并排比较:

  • 如何在共享内存中测量boost进程间向量的大小?

在您的特定情况下,您可以通过使用来展平分配

  • flat_map
  • 使用池分配器作为字符串(或者使用boost::string_ref来引用从大型std::vector分配的字符串)