这是我的代码的一部分:
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”范围内的代码的全部目的是计算传递给函数的下一行中字段的结束位置(整数“end”)。当我使用 KNOWN_PATTERN #defined 编译并加载一些测试文件时,我知道'end' 应该变为 19,我的程序消耗的内存比不使用 KNOWN_PATTERN #defined 编译时少大约 400 MB。400 MB 是我的测试文件的所有行在内存中占用的内存(我可以根据文件大小计算它,并且我在加载文件和开始解析之前观察内存消耗)。所以在我看来, QRegularExpressionMatch 会创建每行的副本并且不会释放它。我在这里想念什么?谢谢!