现在有一个工程,分为四块,一个主程序exe,三个dll库。现在的流程就是主程序exe中会载入配置文件,然后调用dll_1从数据库中载入数据,然后传入dll_2和dll_3中去处理,处理完后通过将数据指针放入dll_1中释放。
由于数据量很大,处理的时间会运行2周左右。现在出现了一个问题,程序的内存正常,稳定。但程序的虚拟内存一直在增长,这样程序运行2个小时后基本就达到1G以上,此时,程序就自动退出了。现在发现退出的原因很明显,是虚拟内存太大。问题是为什么程序的虚拟内存为什么会不停的增长?
泄漏?我用VLD进行检测,测出了一些内存泄漏,但明显不是我想要的。因为程序中使用了大量的stl的vector和map对象,VLD报这些对象有泄漏。我有点晕。哪位高手能帮忙解决我的问题,万分感谢!!!!
由于数据量很大,处理的时间会运行2周左右。现在出现了一个问题,程序的内存正常,稳定。但程序的虚拟内存一直在增长,这样程序运行2个小时后基本就达到1G以上,此时,程序就自动退出了。现在发现退出的原因很明显,是虚拟内存太大。问题是为什么程序的虚拟内存为什么会不停的增长?
泄漏?我用VLD进行检测,测出了一些内存泄漏,但明显不是我想要的。因为程序中使用了大量的stl的vector和map对象,VLD报这些对象有泄漏。我有点晕。哪位高手能帮忙解决我的问题,万分感谢!!!!
还要检查其他申请内存的地方,new了记得delete...
调用dll_1从数据库中载入数据,要限制一下,数据量大时可能dll_2 dll_3来不及处理,
中的数据越来越大,虚拟内存就会不停的增长,最后自动退出了。
方法:当数据达到一定量时,就先不要加载,等数据处理了再加载就不会出现那样的问题了。
实际上不是。STL为了提高内存管理的效率,针对特殊需要(如要分配的内存是等大的并且很小)去重载new,delete操作符. 它会避免每次申请很小的内存,而是一下子得到很大的一块,再自己去定义和使用.(出于效率的考虑,它最后并不释放)。
在关键的数据结构上,它使用了静态的指针,并且定义了一些常量来控制内存块的大小等.隐式的内存泄漏指分配内存后,虽然也释放,但没有及时释放,导致内存消耗无法及时回收.