STL中queue队列内存不断增长怎么解决?
1个回答
展开全部
定义了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是否真的没大量数据
可以确定,有时候我把接收的听到,只读取 当数据没有的时候,内存不减少
------解决方案--------------------------------------------------------探讨我传递的是参数是个结构体 都在在栈区生成的。没有涉及到堆区操作。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询