Я работаю над тем, что требует от меня хранения списка символов и соответствующего счета, они сохраняются как строка, int mapping. Проблема заключается в том, что размер ввода составляет около 32 МБ, но когда я пытаюсь сохранить его в памяти размером с разрывом до 1.4 ГБ, я просмотрел несколько ссылок и обнаружил, что std :: string занимает достаточное количество памяти для ведения бухгалтерского учета и вероятно, вызовет раздувание, поэтому я посмотрел немного дальше и обнаружил, что можно использовать массив boost :: с размером, равным максимальному размеру символа, и поскольку массив boost не делает никакой книги, t вызвать раздувание памяти. Тем не менее, я хочу разместить этот массив boost в общей памяти так: map<boost::array<char, 15>
, int>. Я взглянул на документацию boost :: array и обнаружил, что он не поддерживает распределители, в настоящее время я использую распределители и менеджеры сегментов от повышения следующим образом:Сохранение символов фиксированного размера в общей памяти
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
есть способ сделать это, какие другие варианты, которые у меня есть. Я не ищу полные решения, но подсказки. Спасибо, Деб!
'std :: string' does _not_ неотъемлемо раздувает 32 МБ данных до 1,4 ГБ !!! Вы сделали что-то очень плохое в своем коде. –
_ «Я не ищу полные решения, но подсказки». _ Это говорит о том, что вы не хотите вводить запись в этот репозиторий вопросов и ответов, но вместо этого ищите дискуссионный форум, форум или чат. –
Взорвется ли это, если вы используете std :: allocator – Surt