WinXP怪现象:非内存泄漏引起的内存增长
各位大侠:
现有一Windows服务程序,运行于WinXP SP2环境下,在运行过程中,从“任务管理器”上可以看到该进程所占用的内存呈现不断增大的趋势(即开一个或多个窗口,然后关闭所有窗口,内存就会增长,虽然在开窗口的时候会申请一定数量的内存,一次申请的最大空间为4M多,但我们在关闭窗口的时候会释放掉申请的空间)。
刚一开始我们怀疑是内存泄漏问题,但不管是自己分析代码,如查找所有的new、malloc是否有对应的释放语句,是否存在某些分支忘记释放等,还是用DevPartner(支持VC.NET的内存泄漏查找工具)以及其它方法,在软件本身上是没有找到内存泄漏的地方,所以排除因内存泄漏而引起的内存增长。
后来经过仔细检查,发现“内存使用”中的增量与“虚拟内存大小”增量相差不多。因此初步怀疑与windows操作系统的内存管理机制相关,我有个假设:一旦程序向系统申请一定量的空间,虽然释放了,但操作系统并没有回收回去,此段释放的堆空间仍然属于该进程,并且占用该进程的4G虚拟内存空间,当整个进程退出或者内存紧张时操作系统才来管理这些内存。因为如果某个进程频繁进行申请-->释放操作的话,操作系统会忙于进行内存管理,可能会加重操作系统的负担,而且现在的内存正在不断的增长,现在的机器一般大于512M内存条吧。所以系统不会去在意这些空间。
但现在问题是,随着该服务程序不断运行,进程所占用的内存空间越来越大,最后会导致new或malloc不成功,从而使服务进程退出。
不知小弟是否将问题描述清楚了。
请各位大侠就此问题发表高见。
谢谢!