STL中queue队列内存不断增长怎么解决?

 我来答
私念0450
推荐于2016-03-21 · 超过69用户采纳过TA的回答
知道答主
回答量:122
采纳率:100%
帮助的人:127万
展开全部
定义了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是否真的没大量数据 可以确定,有时候我把接收的听到,只读取 当数据没有的时候,内存不减少 ------解决方案--------------------------------------------------------探讨我传递的是参数是个结构体 都在在栈区生成的。没有涉及到堆区操作。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式