Я работаю над проектом, использующим STXXL, который, как я понимаю, является не базовой версией библиотеки C ++ STL. В настоящее время моя программа работает с ним нормально, но проблема, с которой я сталкиваюсь сейчас, заключается в том, что когда программа работает, она использует около 2 ГБ памяти (с набором данных от низкого до среднего размера).
В моей программе я использую 25 векторов STXXL, которые хранятся в отдельных файлах на диске. Что касается моего файла .stxxl, в настоящее время он настроен на динамическое выделение файла диска (путем установки размера диска в 0).
Итак, мой вопрос: есть ли способ явно заставить STXXL использовать жесткий диск, а не оперативную память? Или это объем использования памяти следует ожидать при использовании этой библиотеки?
Заранее спасибо за любой совет, который может дать любой.
То, что 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, или просто диспетчер задач показывает разные размеры памяти?
Я полагаю, вы используете 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, на самом деле не имеет значения.)