簡體   English   中英

在共享內存中保留固定大小的符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM