![](/img/trans.png)
[英]Eigen fixed-size matrices in shared memory using boost interprocess
[英]Keeping fixed size symbols in shared memory
我一直在做一些事情,要求我存儲符號列表和相應的計數,這些都存儲為字符串,int映射。 問題是輸入大小約為32 MB,但是當我嘗試將其存儲到大小為1.4Gb的內存中時,我經過了幾個鏈接,發現std :: string占用了大量內存,用於簿記和可能會導致腫脹,因此我進一步看了一下,發現可以使用boost :: array,其大小等於符號的最大大小,並且由於boost數組不會做任何保留工作的工作,因此不會導致內存膨脹。 但是,我希望將此boost數組像map<boost::array<char, 15>
,int>這樣放置在共享內存中。我看了一下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
有沒有辦法做到這一點,我還有其他選擇。 我不是在尋找完整的解決方案,而是提示。 謝謝,黛布!
正確的提示是:
此答案包含使用Boost Managed_shared_memory的不同分配技術的良好並排比較:
在您的特定情況下,您可以使用
flat_map
和 boost::string_ref
引用從大型std::vector<char>
分配的字符串)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.