我一直在做一些需要我存储符号列表和相应计数的东西,这些都存储为字符串,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!
答案 0 :(得分:1)
正确的提示是:
这个答案包含了对Boost managed_shared_memory的不同分配技术的良好并排比较:
在您的特定情况下,您可以使用
展平分配flat_map
和boost::string_ref
来引用从大std::vector<char>
分配的字符串)