程序长时间运行过程中内存缓慢增长

cyfh 2004-09-28 04:59:52
我的程序主要工作是:接收网络上的音视频数据,然后把这些数据解码播放出来。
其中接收到的每帧数据缓存的指针先存到一个缓存容器里面,播放时从这个容器里面把数据一帧一帧数据缓存的指针取出来送去解码。这两个过程在不同的线程中。
在程序的运行过程中(已经增长了一定量),我用一个整理内存的工具(在网上找的一个软件)把系统内存整理了一遍,程序的内存消耗马上减到了和程序最初运行起来时的一样了。这种整理应该对运行中的程序没什么关系,主要时对系统的整理。然后再经过长时间运行又会增长到一定高度,如果再整理一次则又会降低到初试运行的内存量。。。。。。
我现在就是怀疑这个容器里面的缓存指针所指的内存不断的分配、释放、分配、释放,导致操作系统对某些内存没能及时释放,从而使得内存在运行过程中缓慢增长。
我想请问高手,我的这种猜测是否合理。如果真是这样,不知道有没有什么方法可以解决这个问题。windows有没有整理内存的相关接口?
...全文
783 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
同桌老王 2004-09-29
  • 打赏
  • 举报
回复
new/delete的太多了
都是碎片惹得祸

可以new 一个很大的内存,然后你的程序都使用这个内存,不再增长其他的消耗
socrazylee 2004-09-29
  • 打赏
  • 举报
回复
奇迹啊,内存能缓慢增长,我的内存要是也能缓慢增长就好了,我就不用买几块内存条了,让他自动增长到40g的内存---我不怎么贪心的,40g内存就好
sharkhuang 2004-09-29
  • 打赏
  • 举报
回复
泄漏吧!着purity等工具帮你查查吧!程序合成起来以后只能靠工具了。
grooving 2004-09-29
  • 打赏
  • 举报
回复
可能是内存碎片吧。用静态数组试试。
sunlu_eric 2004-09-29
  • 打赏
  • 举报
回复
不是,是先进后出!!!
sunlu_eric 2004-09-29
  • 打赏
  • 举报
回复
同意楼上的!!!
可以用栈,先进先出!!!
Wolf0403 2004-09-29
  • 打赏
  • 举报
回复
与其寻找一个 Windows 的整理内存的接口,还不如重写这个容器,使用一个静态分配的缓冲区而不是每次动态分配来的合理。这样还可以提高效率。
nicknide 2004-09-29
  • 打赏
  • 举报
回复
楼主是不是在调试环境下运行呢?如果是的话,那么可以告诉你,很多调试器在调试的时候,动态分配的内存都不会马上真正释放的……因为需要进行比如内存泄露查看,写溢出判断,命中次数等等很多功能。

建议用relase版本看看

nicknide 2004-09-29
  • 打赏
  • 举报
回复
奇迹啊,内存能缓慢增长,我的内存要是也能缓慢增长就好了,我就不用买几块内存条了,让他自动增长到40g的内存---我不怎么贪心的,40g内存就好


你厉害,目前指针最大都只支持4G寻址,你的40G怎么寻呢?
paranoid_gre 2004-09-28
  • 打赏
  • 举报
回复
怎么感觉是java中垃圾没有及时回收啊,c++中应该没有这样的问题啊

64,690

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧