Высокое использование памяти с STXXL

Я работаю над проектом, использующим STXXL, который, как я понимаю, является не базовой версией библиотеки C ++ STL. В настоящее время моя программа работает с ним нормально, но проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда программа работает, она использует около 2 ГБ памяти (с набором данных от низкого до среднего размера).

В моей программе я использую 25 векторов STXXL, которые хранятся в отдельных файлах на диске. Что касается моего файла .stxxl, в настоящее время он настроен на динамическое выделение файла диска (путем установки размера диска в 0).

Итак, мой вопрос: есть ли способ явно заставить STXXL использовать жесткий диск, а не оперативную память? Или это объем использования памяти следует ожидать при использовании этой библиотеки?

Заранее спасибо за любой совет, который может дать любой.

2

Решение

То, что bobb_the_builder говорит об использовании оперативной памяти stxxl: vector, является правильным.

Смотрите следующий код:

#include <stxxl/vector>

int main()
{
// create vector
//stxxl::VECTOR_GENERATOR<int>::result vector[25];
stxxl::VECTOR_GENERATOR<int, 1, 1, 1*1024*1024>::result vector[25];

// fill vectors with integers
for (size_t i = 0; i < 100 * 1024 * 1024 * 1024llu; ++i) {
vector[i % 25].push_back(i);
}

return 0;
}

В Linux размер резидентной памяти программы увеличивается до
27528 КиБ при использовании и
до около 1,6 ГиБ при использовании которого есть.

Диспетчер Windows показывает то же самое? Это может быть ошибка STXXL только в Windows, или просто диспетчер задач показывает разные размеры памяти?

3

Другие решения

Я полагаю, вы используете STXXL::VECTOR_GENERATOR шаблон для создания 25 stxxl::vectorВы упомянули в своем сообщении? Использование внутренней памяти stxxl::vectorв целом зависит от вашей индивидуальной конфигурации (т.е. block_size * page_size * cache_pages) как описано в STXXL документация по STXXL :: VECTOR_GENERATOR.
Это все вместе складывается в зарезервированное внутреннее (= основное) потребление памяти.
Насколько я знаю, STXXL пытается выделить столько внутренней памяти, сколько ваши контейнеры используют (если возможно), так и кэши, в зависимости от этих параметров шаблона.

Заметка: дефолт Значения для вышеупомянутых параметров шаблона:

page_size = 4
cache_pages = 8
block_size = 2 MiB

Что приводит к общему потреблению памяти 25 * (2 МиБ * 4 * 8) = 1600 МиБ это объясняет огромную часть вашего потребления памяти 2 ГБ.

(Примечание: какой data_type (ValueType) хранится в вашем векторе STXXL, на самом деле не имеет значения.)

2

По вопросам рекламы [email protected]