здесь является частью моего кода:QRegularExpressionMatch потребление памяти
int Parser::SomeFunction(const QString &line, int start, int& fieldStart, int& fieldLength) const
{
int end;
......
if (0 == m_pRegExp)
{
......
}
else
{
#ifdef KNOWN_PATTERN
end = 19;
#else
QRegularExpressionMatch match = m_pRegExp->match(line, start);
if (!match.hasMatch())
{
return 0;
}
// currently we are requiring match to be found exactly at the position 'start'
if (match.capturedStart() != start)
{
return 0;
}
end = match.capturedEnd();
#endif
}
.....
}
Программа загружает текстовый файл и разбирает его линии один за другим. Вся цель кода в области «else» заключается в вычислении, где поле заканчивается (целое число «конец») в следующей строке, переданной функции. Когда я компилирую с помощью KNOWN_PATTERN #defined и загружаю некоторый тестовый файл, для которого я знаю, что «конец» должен стать 19, моя программа потребляет на 400 МБ меньше памяти, чем при компиляции без KNOWN_PATTERN #defined. 400 МБ - это то, что все строки моего тестового файла занимают в памяти (я могу рассчитать его на основе размера файла, а также наблюдать за потреблением памяти при загрузке файла и до начала синтаксического анализа). Так мне кажется, что QRegularExpressionMatch создает копии каждой строки и не выпускает ее. Что мне здесь не хватает? Спасибо!
Спасибо, молбднило за ваш ответ. Если ОС отменит фактическое освобождение памяти, я бы ожидал, что он будет повторно использовать его при новых запросах на распределение. Но моя 32-разрядная программа достигает предела 2Gb для Windows и сбой при загрузке файла 800 МБ - только потому, что эти 800 МБ дублируются темпами, подобными тем, которые были показаны в коде, который я показал, а не освобожден и не использовался повторно? Во-вторых, можете ли вы предложить лучшие инструменты для мониторинга фактического использования памяти в Windows? Спасибо – mvidelgauz
@mvidelgauz Он должен повторно использовать, когда нужно, так что это странно. Но действительно ли вам нужно загрузить всего 800 МБ одновременно? Это не самая масштабируемая идея в мире. – molbdnilo
Он не возвращается, как я уже говорил, и да, я знаю, что обычно не рекомендуется загружать весь 800 МБ, но для конкретной программы это лучший способ достижения целей - программное обеспечение - это просмотрщик файлов log4j с несколькими видами/фильтрами/результаты поиска и быстрый просмотр назад и вперед в каждом (индивидуально отфильтрованном) представлении – mvidelgauz