现在有一个工程,分为四块,一个主程序exe,三个dll库。现在的流程就是主程序exe中会载入配置文件,然后调用dll_1从数据库中载入数据,然后传入dll_2和dll_3中去处理,处理完后通过将数据指针放入dll_1中释放。
由于数据量很大,处理的时间会运行2周左右。现在出现了一个问题,程序的内存正常,稳定。但程序的虚拟内存一直在增长,这样程序运行2个小时后基本就达到1G以上,此时,程序就自动退出了。现在发现退出的原因很明显,是虚拟内存太大。问题是为什么程序的虚拟内存为什么会不停的增长?
泄漏?我用VLD进行检测,测出了一些内存泄漏,但明显不是我想要的。因为程序中使用了大量的stl的vector和map对象,VLD报这些对象有泄漏。我有点晕。哪位高手能帮忙解决我的问题,万分感谢!!!!

解决方案 »

  1.   

    vector等不要频繁申请空间,一开始reserve一个较大空间...
    还要检查其他申请内存的地方,new了记得delete...
      

  2.   

    我想是这样的问题:
    调用dll_1从数据库中载入数据,要限制一下,数据量大时可能dll_2 dll_3来不及处理,
    中的数据越来越大,虚拟内存就会不停的增长,最后自动退出了。
    方法:当数据达到一定量时,就先不要加载,等数据处理了再加载就不会出现那样的问题了。
      

  3.   

    现在基本可以肯定的是new的地方都delete了,我用清理内存的工具,基本程序所占内存都可以清理出来,但虚拟的没有办法。vector现在是用作装载数据的容器,每次请求新的数据时,都会把原来的东西清空,然后clear。然后再装入新的数据。从流程上来说,没有缺漏啊。
      

  4.   

    hu_zhi_de:现在是这样的,数据的加载和处理在同一个线程中,但每次都是dll_2中发出请求,dll_1载入数据,然后再处理的,这个过程是串行的,不会出现拥塞的问题。而且每次处理完毕,都会调用释放。
      

  5.   

    对的,从理论上说是没有这个问题。
    实际上不是。STL为了提高内存管理的效率,针对特殊需要(如要分配的内存是等大的并且很小)去重载new,delete操作符. 它会避免每次申请很小的内存,而是一下子得到很大的一块,再自己去定义和使用.(出于效率的考虑,它最后并不释放)。
    在关键的数据结构上,它使用了静态的指针,并且定义了一些常量来控制内存块的大小等.隐式的内存泄漏指分配内存后,虽然也释放,但没有及时释放,导致内存消耗无法及时回收.
      

  6.   

    你看下http://dozb.blogchina.com/dozb/1654688.html这篇文章,我觉得过度使用STL的迭代器和指针的时候会有内存泄漏的。