C++ vtk使用越来越多的内存,速度变慢。

C++ vtk使用越来越多的内存,速度变慢。,c++,vtk,C++,Vtk,我在应用程序中遇到内存泄漏,并将其锁定为 与vtk有关的东西。我在Windows 7上使用vtk 6.1.0,Visual Studio 2012全部采用64位 我在vtk的更多算法中遇到了这种行为。 与内存相遇的肯定不是操作系统,而是vtk。似乎每次调用update vtk都会创建对象并将它们放入某种更新队列中,最终不会删除。考虑这个代码: #include <vtkImageConstantPad.h> #include <vtkImageData.h> #inclu

我在应用程序中遇到内存泄漏,并将其锁定为 与vtk有关的东西。我在Windows 7上使用vtk 6.1.0,Visual Studio 2012全部采用64位

我在vtk的更多算法中遇到了这种行为。 与内存相遇的肯定不是操作系统,而是vtk。似乎每次调用update vtk都会创建对象并将它们放入某种更新队列中,最终不会删除。考虑这个代码:

#include <vtkImageConstantPad.h>
#include <vtkImageData.h>
#include <ctime>

int main(int argc, char *argv[])
{
    int c=0;
    clock_t start;
    size_t iterations = 1000;
    while (c != '.'){
         c = getchar();
         start = clock();
         for(size_t i=0; i<iterations; ++i){
             vtkImageConstantPad* pad = vtkImageConstantPad::New();
             vtkImageData* test = vtkImageData::New();
             test->SetExtent(0,1,0,1,0,1);
             test->AllocateScalars(VTK_FLOAT,1);
             pad->SetInputData(test);
             pad->SetOutputWholeExtent(0,2,0,2,0,2);
             pad->Update(); //this is what makes it bad
             pad->Delete();
             test->Delete();
         }
         std::cout << "Time for " << iterations << ": " << static_cast<double>(clock() - start) / CLOCKS_PER_SEC << "sec" << std::endl;
    }
    return 0;
}

因此,每次调用
update()
,它都会消耗更多的内存和时间,尽管for循环作用域中的所有对象都会被销毁。有人能在其他平台上确认这一点吗?或者知道如何解决这一问题吗?

经过进一步调查,我发现并非所有机器都会出现这一问题。
最后,我发现我的Bitdefender防病毒软件在某种程度上扰乱了程序,导致了这种行为。当我关闭它时,一切正常。

这不是内存泄漏,而是操作系统的“优化”,使以前分配的内存映射到进程。如果系统的可用内存越来越少,内存将根据需要重新映射到另一个进程。这没什么好担心的。@JoachimPileborg这本应该是一个答案。@nwp I(和许多其他人)以前已经发布过很多次这样的答案。我只是懒得马上找到一个标记为重复的如果这是一个操作系统优化,那么在没有更新的情况下为什么不进行呢?在这里,new分配的内存在循环结束时被释放和重用,为什么操作系统不对update()函数中创建的对象执行相同的操作?如果没有内存泄漏,那么为什么在第一次循环迭代后内存使用会增加?应用程序有映射到它的空闲内存,以便为该内存中的第二次迭代分配所有内存。windows不需要为应用程序分配新内存!因此,该行为表明存在内存泄漏,或者优化没有达到它的目的:避免(取消)为应用程序分配新内存。嘿,对我来说也是一样,我也有bit defender,可以重现问题和解决方案。
Time for 1000: 0.816sec
Time for 1000: 1.879sec
Time for 1000: 3.454sec
etc.