簡體   English   中英

QRegularExpression匹配內存消耗

[英]QRegularExpressionMatch memory consumption

這是我的代碼的一部分:

    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
    }
.....
}

該程序將加載一個文本文件,並逐行分析其行。 “其他”范圍內的代碼的全部目的是計算在傳遞給函數的下一行中字段的結束位置(整數“ end”)。 當我使用KNOWN_PATTERN #defined進行編譯並加載一些測試文件時,我知道其“結束”應為19,與不使用KNOWN_PATTERN #defined進行編譯時相比,我的程序消耗的內存少約400 MB。 我的測試文件的所有行都占用了400 MB的內存(我可以根據文件大小來計算它,也可以在加載文件時以及開始解析之前觀察內存消耗)。 因此在我看來QRegularExpressionMatch創建每行的副本,但不釋放它。 我在這里想念什么? 謝謝!

任務管理器和類似工具是非常鈍的工具,用於觀察C ++運行時的內存分配。

特別是,運行時不一定會將釋放的內存釋放回OS,因為在許多平台上OS內存分配相對較慢,但可以自行保留。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM