自己写的应用程序 一运行就占用内存100%是怎么回事儿呢

lily0628 2012-03-26 05:07:59

在任务管理器中察看
占用内存97%

导致这种状况的原因可能有哪些呢
...全文
1775 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
庄鱼 2012-03-28
  • 打赏
  • 举报
回复
windows下有winProc函数,作用是一样的
lily0628 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 的回复:]
建一个volatile属性的信号量,在你的程序里将出口返回值与该变量挂钩,这样,你就可以用while语句进行死循环读该变量值。由于该变量属易变类型,CPU在这里其实是什么都不作的,仅仅是wait,直到该变量发生变化。由于相关函数都与该变量相关,实际上也就建立了一个仲裁退出、跳跃机制,以便程序根据信号量的变化随时响应相应的操作。作为哑程序,就是一个while循环与switch跳转语句的结合,由于该程……
[/Quote]

谢谢你的回复啊
很详细
我去网上查了一下
守候进程好像是linux下的东西
不知道windows下有没有类似的实现呢

翅膀又硬了 2012-03-28
  • 打赏
  • 举报
回复
死循环了吧?
nx_lyj428 2012-03-28
  • 打赏
  • 举报
回复
vld-1.9h-setup,这个工具就不错
nx_lyj428 2012-03-28
  • 打赏
  • 举报
回复
去开源社区下个内存泄露检查工具,很方便的
lily0628 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 freefice 的回复:]
程序里出现死循环很正常,你可以写个哑进程:专门处理信号量及空操作,那样的话,CPU忙的情况会降下来。
[/Quote]

写个哑进程:专门处理信号量及空操作

这个要怎么操作呢
不太明白呀
Kaile 2012-03-27
  • 打赏
  • 举报
回复
WaitForSingleObject

不占CPU
庄鱼 2012-03-27
  • 打赏
  • 举报
回复
程序里出现死循环很正常,你可以写个哑进程:专门处理信号量及空操作,那样的话,CPU忙的情况会降下来。
lily0628 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 kuzuozhou 的回复:]
加了个sleep语句自然会降低cpu消耗率,这好像的确是一种解决办法,我原来也遇到过。

这个cpu使用率是不是也和电脑的状况相关呢
加了sleep之后昨天下午测试是50%
今天早上来测试只1%了
代码没做什么改动的
pengfoo 2012-03-27
  • 打赏
  • 举报
回复
加了个sleep语句自然会降低cpu消耗率,这好像的确是一种解决办法,我原来也遇到过。[Quote=引用 21 楼 lily0628 的回复:]
引用 20 楼 lactoferrin 的回复:
检查哪里有死循环


在线程中是有死循环

while(TRUE)
{
if()//如果满足条件,dosomething
{
.....
}
}

昨天在if后面加了个
else
Sleep(500);

CPU使用率下降到了50%

怎么才能再提高一下性能呢
[/Quote]
lily0628 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 lactoferrin 的回复:]
你这不是游戏,所以应该等待信号才继续
[/Quote]

之前做了一个版本是用了event
SetEvent()
WaitForSingleEvent()

但是pm不喜欢这样
只好改成用变量来判断
需要一直得检测两个变量是不是变成相等了
Lactoferrin 2012-03-27
  • 打赏
  • 举报
回复
你这不是游戏,所以应该等待信号才继续
lily0628 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 elegant87 的回复:]
在一个循环中new了而没有delete
[/Quote]

没有在循环中new
lily0628 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 lactoferrin 的回复:]
检查哪里有死循环
[/Quote]

在线程中是有死循环

while(TRUE)
{
if()//如果满足条件,dosomething
{
.....
}
}

昨天在if后面加了个
else
Sleep(500);

CPU使用率下降到了50%

怎么才能再提高一下性能呢
庄鱼 2012-03-27
  • 打赏
  • 举报
回复
建一个volatile属性的信号量,在你的程序里将出口返回值与该变量挂钩,这样,你就可以用while语句进行死循环读该变量值。由于该变量属易变类型,CPU在这里其实是什么都不作的,仅仅是wait,直到该变量发生变化。由于相关函数都与该变量相关,实际上也就建立了一个仲裁退出、跳跃机制,以便程序根据信号量的变化随时响应相应的操作。作为哑程序,就是一个while循环与switch跳转语句的结合,由于该程序该程序始终运行,而且实际上除了捕捉退出、中断陷阱,就是死循环,在系统里不占用CPU资源,因此被称之为哑进程,也有叫守候进程、陷阱函数什么的。
Lactoferrin 2012-03-26
  • 打赏
  • 举报
回复
检查哪里有死循环
elegant87 2012-03-26
  • 打赏
  • 举报
回复
在一个循环中new了而没有delete
lily0628 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 oldskywolf 的回复:]
cpu使用率 97%,还算正常吧
[/Quote]

不太正常啊
电脑会卡死了
oldskywolf 2012-03-26
  • 打赏
  • 举报
回复
cpu使用率 97%,还算正常吧
lily0628 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 bofrobber 的回复:]
引用 14 楼 bofrobber 的回复:

cpu和内存问题没有关系吧。估计你代码什么地方写了死循环了,导致一直需要cpu计算。


看错题目了。
我觉得是不是他把cpu写成内存了。
内存有一半是要给内核使用,lz怎么可能看到97%的内存使用率
[/Quote]

en 是cpu使用率97%
加载更多回复(15)

64,654

社区成员

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

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