我的一个小程序,因为需要,需要动态载入BMP资源,大概有几十张,都是160x240x8bit的,每次只需显示其中一张。我的处理方法不是在程序启动时全部载入,然后随用随调;而是在需要时用LoadImage()动态载入,用完立即用DeleteObject()释放。
可是,在测试时发现,随着不断的运行,程序的内存占用会从刚启动的不到4000K飙至7000多K。因此想问一下,这是不是正常现象,就是说是我的程序中有泄漏的Bug还是Windows没有实时回收释放的内存块造成的?

解决方案 »

  1.   

    因为仔细查过很多次了,还监视了每个载入的BMP图片的DeleteObject()返回值,没有泄漏的,所以才发贴子询问的。
      

  2.   

    用BoundsChecker检查一下就清楚了,既然这么明显的内存增长,那肯定有泄露
      

  3.   

    是否是其他地方的GDI资源泄漏
      

  4.   

    试验了一下,方法是在一个定时间隔为200ms的回调函数中,添加两句话:static HBITMAP hBmp
    hBmp = LoadImage(g_hInstance, 101, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
    DeleteObject(hBmp);编译,启动。在资源管理器里监视内存占用,发现从启动的3200K增长至4400K左右,并稳定在这个值。最小化后,瞬间降为700多K,然后逐步增长并稳定在2100K。然后最大化,发现保持在2800K就不再上升了。
    呵呵,这个大概涉及到Windows内核的内存管理机制。总之,不是偶的程序内存泄漏就行。
      

  5.   

    不错,另外我还想知道,在程序里,一些常用的资源,是在启动后一次load完毕好,还是用时才加载好,比如,我重绘系统标题栏按钮的那些图片,我想启动时一次加载完