Ответ 1
Я бы рассмотрел использование STXXL. Он повторно реализует многие интерфейсы контейнеров stl с файловой системой. Одна из этих реализаций предназначена для структуры deque.
Недавно я создал приложение, которое в значительной степени опирается на очереди stl и сталкивается с проблемами памяти, очередь становится большой, чтобы вписаться в память машин. Существуют ли резервные копии с открытым исходным кодом, эффективные очереди ввода-вывода IO/памяти, которые могут быть подключены к месту очереди stl, что делает мое приложение волшебным образом использовать меньше оперативной памяти?
Мне бы хотелось что-то с буфером-механизмом чтения/записи, так как мое приложение составляет около 50k enqueues/dequeues pr sec, а объекты довольно малы.
Моя очередь содержит пары из 32-битных целых чисел, что делает каждую запись 64-разрядной, связанные списки не могут быть исключены из-за того, что они удвоят потребление памяти.
Я бы рассмотрел использование STXXL. Он повторно реализует многие интерфейсы контейнеров stl с файловой системой. Одна из этих реализаций предназначена для структуры deque.
Да, попробуйте STXXL. Но не используйте deque, если вы можете избежать произвольного доступа (т.е. Оператора []). Вместо этого используйте stxxl:: sequence, он эффективен во внешней памяти.
Отказ от ответственности: я возрождаю библиотеку. Пожалуйста, пришлите мне патч, если вы исправите проблему С++ 11, которая, вероятно, связана с программной цепочкой MacOSX.
std::queue
- это адаптер контейнера, означающий, что это, по существу, интерфейс над другим контейнером. В этом случае по умолчанию используется std::deque
, который представлен в памяти как вектор массивов с постоянным размером, так как вектор содержит указатели на массивы, которые он хорошо вписывает в память. Если вам нужно, чтобы вещи были еще менее смежными, вы могли бы попытаться сделать бэкэнд std::list
, связанные структуры могут часто обрабатывать очень большие объемы данных, так как они не должны быть смежными.
Вы также можете предоставить свой собственный интерфейс интерфейсу, он должен соответствовать требованиям SequenceContainer