簡體   English   中英

std :: deque <std::string> 有效地計算內存中的大小

[英]std::deque<std::string> count size in memory efficiently

我一直在研究一個基本的日志文件類,一旦達到設置的大小限制(例如10Mb),它將被截斷20%,我決定將文件存儲到stringstream緩沖區中,然后逐個日志地將其存儲到std ::中: deque(使用std :: deque代替std :: vector,因此我可以輕松地從結構頂部彈出,而不必進行排序等)加載和存儲如下所示:

    std::deque<std::string> vLogs;
    std::stringstream ssBuffer;
    std::string sLog;

    ssBuffer << in.rdbuf();
    in.close();

    while(getline(ssBuffer,sLog))
        vLogs.push_back(sLog);

日志文件的設計使其在達到設定大小(例如10Mb)時會被截斷,因此我真正想做的是檢查vLogs中std :: string的大小-我可以通過以下方式進行操作:

    int nSize = 0;
    for(auto it = vLogs.begin(); it != vLogs.end(); ++it)
        nSize += it->size();

    do{
        nSize -= vLogs.front().size();
        vLogs.pop_front();
    }while(nSize > (MAX_SIZE * 0.8));

我要問的問題是,是否有一種更有效的方法來獲取std :: strings占用的實際大小,而不是像現在這樣手動進行操作。

謝謝-任何更多的信息,只是問。

自己做一個具有std::deque內存大小計數器的類,並監視插入(例如,增加插入到計數器中的內存大小)和提取(例如,減去從計數器中提取的內存大小)。

現在,您要多次累加大小。 沒必要

你可以

  • 將所有尺寸相加,然后在每次刪除項目時向下調整總計

要么

  • 從尾部開始以相反的順序添加大小,一旦達到閾值,則從該點開始刪除所有項目

暫無
暫無

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

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