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

时间:2014-10-24 17:10:33

标签: c++ c arrays memory boost

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

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

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

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

1 个答案:

答案 0 :(得分:1)

正确的提示是:

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

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

在您的特定情况下,您可以使用

展平分配
  • flat_map
  • 对字符串使用池分配器(或者使用boost::string_ref来引用从大std::vector<char>分配的字符串)