程序启动导致其他程序所占内存减少?

xy0402 2010-09-04 02:59:35
在windows系统下启动两个程序,两个程序都是由其他程序带起来的,A程序先启动,并申请内存,静态申请到25M内存,总共就需要25M内存,B程序后启动,启动过程中,A程序所占的内存一直减少到2M左右,不知道是什么原因导致的?应该如何排查呢?
A程序内存不足,无法进行正常工作了。
如果B程序不启动的话,A程序内存不会减少。
求助。在线等,谢谢大家了!!!!
...全文
138 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xy0402 2010-09-07
  • 打赏
  • 举报
回复
最近两天查了下,应该是由于启动的程序比较多,物理内存(1G)不够用了,操作系统减少A程序所占物理内存,而使A程序使用虚拟内存来存储数据,导致A程序存取时间增加,从而影响正常通讯。
增加物理内存(变成2G)之后,物理内存减少的情况就没有了。
谢谢大家的回答!很有帮助~~~~
康斯坦汀 2010-09-04
  • 打赏
  • 举报
回复
用new分配的内存是在堆中,正确分配以后,操作系统会将此内存的地址加入已分配内存地址链表,
其他进程的程序是不会再进行分配的的,也就不会出现B程序运行,A程序内存被占用的情况。
但是如果你的程序本身存在问题,比如多线程程序会有一个线程占用另一个线程内存产生错误的情况,
或者在不适当的时候释放了内存,操作系统移除了已分配内存地址,才可能会让其他程序占用。

所以1)如果A程序是多线程的,重点检查这部分代码 2)检查释放内存的代码,它可能被调用了。
(可通过写LOG方式,调试不一定能捕获)
xy0402 2010-09-04
  • 打赏
  • 举报
回复
那应该如何查看此类bug呢?
但是我不起B程序的话,A程序内存使用是不会减少的啊。
而且A程序在负责处理通讯,是不会空闲的啊。
康斯坦汀 2010-09-04
  • 打赏
  • 举报
回复
应该是A程序代码存在bug,在内存分配使用方面,不然不会出现
“A程序内存不足,无法进行正常工作了。”的现象。
系统是会在某程序空闲的时候自动调整内存占用,但不会影响正常程序使用的。

xy0402 2010-09-04
  • 打赏
  • 举报
回复
那如何确定发生了物理内存换页呢?从上述两项能看出来么?
justkk 2010-09-04
  • 打赏
  • 举报
回复
在任务管理器中能看到“内存使用”、“虚拟内存大小”两列
xy0402 2010-09-04
  • 打赏
  • 举报
回复
这样会导致程序申请的内存减少么?如何查看是否物理内存换页呢?
justkk 2010-09-04
  • 打赏
  • 举报
回复
不会是内存调度策略影响的吧,物理内存换页了?
xy0402 2010-09-04
  • 打赏
  • 举报
回复
A程序是我写的,是在初始化对象时,用new申请的内存。
补充一下,在内存减少过程中,A中并未调用析构函数释放内存。
B程序不是我写的。
辰岡墨竹 2010-09-04
  • 打赏
  • 举报
回复
那个A程序是你写的么?你用什么方法申请内存的?
xy0402 2010-09-04
  • 打赏
  • 举报
回复
不是的,呵呵。
小楫轻舟 2010-09-04
  • 打赏
  • 举报
回复
楼主,你那B程序不会是病毒吧

65,186

社区成员

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

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