测FPS时,用了两个DWORD,把一个值赋给另一个,结果内存一直增加。。。

wxxth 2011-08-23 05:44:25
我在测图像显示的帧频,用了下面的方法:

	static DWORD dwSysTime1,dwSysTime2;
static TCHAR szTime[20];

下面的代码会反复运行,大概每秒60次,运行时内存一直增加,没一会儿快满了(我电脑内存4G)然后,我把其中最后一行的dwSysTime1 = dwSysTime2;注释掉,就没事了
		dwSysTime2 = timeGetTime(); // 获得时间,据说这个函数不如GetTickCount好,不过暂时先用着,大家别学哈
wsprintf(szTime, TEXT("%4i FPS"), 1000 / (dwSysTime2 - dwSysTime1)); //输出FPS
TextOut(hdcMem, (cxClient - 100), 5, szTime, 8);
dwSysTime1 = dwSysTime2; //关键就是这里! 我把这行语句注释掉,内存就不会一直增加了!

可是,为什么一个赋值语句会这么占内存呢???
...全文
65 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxxth 2011-08-24
  • 打赏
  • 举报
回复
呃。。。测试了一下,果然。。。
ndy_w 2011-08-24
  • 打赏
  • 举报
回复
是滴...要防止除0
pkpxxd 2011-08-24
  • 打赏
  • 举报
回复
1000 / (dwSysTime2 - dwSysTime1)); 除数为0导致内存泄露
wxxth 2011-08-24
  • 打赏
  • 举报
回复
但我很奇怪的就是,只要我把dwSysTime1 = dwSysTime2; 注释掉,就好了,这是怎么回事???
wxxth 2011-08-24
  • 打赏
  • 举报
回复
我刚刚又测试了一下,发现是这样:
下面这段程序是在WM_PAINT里面的
dwSysTime2 = timeGetTime(); // 获得时间,据说这个函数不如GetTickCount好,不过暂时先用着,大家别学哈
wsprintf(szTime, TEXT("%4i FPS"), 1000 / (dwSysTime2 - dwSysTime1)); //输出FPS
TextOut(hdcMem, (cxClient - 100), 5, szTime, 8);
dwSysTime1 = dwSysTime2; //关键就是这里! 我把这行语句注释掉,内存就不会一直增加了!

我设置了一个Timer,每1/60秒发送一次WM_PAINT消息

然后我发现,只有当我滑动滚动条的时候,内存才狂增,
我的图片比窗口大,所以水平和竖直都有滚动条,我即使滑动滚动条后不用InvalidateRect更新无效区,等待Timer刷新,也是会增加内存,而且增加很快
QQ515311445 2011-08-24
  • 打赏
  • 举报
回复
肯定不是这里的问题
ndy_w 2011-08-24
  • 打赏
  • 举报
回复
哈哈!我是说这个不可能的。这个赋值语句不涉及分配内存,不会导致内存增长。
如果你说的只有这个地方用是真的,那确实不好理解。新开的内存到哪里去了?
wxxth 2011-08-24
  • 打赏
  • 举报
回复
谣言???
晕,这是我自己的程序啊。。。不是听别人说的啥的。。。
另外我这俩变量就这里使用了别的地方完全没有用到
ndy_w 2011-08-23
  • 打赏
  • 举报
回复
这是谣言...
应该是你这两个变量导致了其他地方的逻辑分支不同。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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