當前位置:編程學習大全網 - 源碼下載 - STL中queue隊列內存不斷增長怎麽解決?

STL中queue隊列內存不斷增長怎麽解決?

定義了queue隊列變量。壹個線程不斷的添加數據(push),另壹個線程不斷的讀取,(pop)typedf struct{int x;int y;int z;}POINT;//聲明隊列queue<POINT m_data;CRITICAL_SECTION m_crit;程序初始化關鍵區InitializeCriticalSection(&m_crit);主線程保存數據到隊列void SaveData(POINT *pPoint){POINT pt;pt.x=pPoint-x;pt.y=pPoint-y;pt.z=pPoint-z;EnterCriticalSection(&m_crit);m_data.push(NP);LeaveCriticalSection(&m_crit);}另壹個線程讀取隊列void ReadQueue(){EnterCriticalSection(&m_crit);if(!m_Qdata.empty()){POINT& pt=m_data.front();m_data.pop();}LeaveCriticalSection(&m_crit);}在使用的過程中 基本是存入壹個就讀取壹個 不存在數據堆積的情況。effective stl第17條:使用“swap技巧”除去多余的容量。------解決方案--------------------------------------------------------那說明妳的寫線程執行速度比讀要快。這類問題,必須要做數量限制,否則等於是妳假設了:讀線程比寫線程快。------解決方案--------------------------------------------------------探討引用:壹直在讀,push進去,deque也需要內存容納。太多數據自然增長數據量基本上是每秒存入壹條數據,每秒讀取壹條數據,理論上不會有大量數據堆積在隊列中------解決方案--------------------------------------------------------探討queue就是deque的包裝,轉發接口而已。只不過個人習慣用deque。應該查查queue是否真的沒大量數據可以確定,有時候我把接收的聽到,只讀取 當數據沒有的時候,內存不減少------解決方案--------------------------------------------------------探討我傳遞的是參數是個結構體 都在在棧區生成的。沒有涉及到堆區操作。

  • 上一篇:新冠疫情是什麽時候開始的?
  • 下一篇:Drawableleft源代碼
  • copyright 2024編程學習大全網