[vtkusers] Memory issues ! (Plain Text)

tutu lamotte tutulamotte at yahoo.com
Wed Sep 17 16:01:17 EDT 2003


Dear list! 

<<Sorry for the previous HTML version of this
message.>>

We are currently tracking the memory usage of our
application made on top of VTK.

We discovered that using VTK instead of OpenGL
directly means that our application takes way too much
memory for its 3D display needs.

We just find out that a lot of memory seams to be
wasted like in this case when calling “Render” on a
vtkLODActor instance.

CALL STACK :

 ==> extern:"_nh_malloc()" at line 194 (dbgheap.c) in
"msvcrtd.dll"
     ==> extern:"::operatornew(unsigned int)" at line
24 (new.cpp) in "msvcrtd.dll"
     ==> extern:"vtkIdTypeArray::ResizeAndExtend(int)"
at line 214 (D:\Program
Files\vtk40\vtk-src-windows\Common\vtkIdTypeArray.cxx)
in "vtkcommon.dll"
     ==> extern:"vtkIdTypeArray::Squeeze(void)" at
line 82 (D:\Program
Files\vtk40\vtk-src-windows\Common\vtkIdTypeArray.h)
in "vtkcommon.dll"
     ==> extern:"vtkCellArray::Squeeze(void)" at line
228 (D:\Program
Files\vtk40\vtk-src-windows\Common\vtkCellArray.h) in
"vtkcommon.dll"
     ==> extern:"vtkPolyData::Squeeze(void)" at line
1349 (D:\Program
Files\vtk40\vtk-src-windows\Common\vtkPolyData.cxx) in
"vtkcommon.dll"
     ==> extern:"vtkAppendPolyData::Execute(void)" at
line 514 (D:\Program
Files\vtk40\vtk-src-windows\Graphics\vtkAppendPolyData.cxx)
in "vtkgraphics.dll"
     ==> extern:"vtkSource::ExecuteData(class
vtkDataObject*)" at line 163 (D:\Program
Files\vtk40\vtk-src-windows\Common\vtkSource.h) in
"vtkcommon.dll"
     ==> extern:"vtkSource::UpdateData(class
vtkDataObject*)" at line 418 (D:\Program
Files\vtk40\vtk-src-windows\Common\vtkSource.cxx) in
"vtkcommon.dll"
     ==> extern:"vtkDataObject::UpdateData(void)" at
line 411 (D:\Program
Files\vtk40\vtk-src-windows\Common\vtkDataObject.cxx)
in "vtkcommon.dll"
     ==> extern:"vtkDataObject::Update(void)" at line
292 (D:\Program
Files\vtk40\vtk-src-windows\Common\vtkDataObject.cxx)
in "vtkcommon.dll"
     ==>
extern:"vtkOpenGLPolyDataMapper::RenderPiece(class
vtkRenderer*,class vtkActor*)" at line 154 (D:\Program
Files\vtk40\vtk-src-windows\Rendering\vtkOpenGLPolyDataMapper.cxx)
in "vtkrendering.dll"
     ==> extern:"vtkPolyDataMapper::Render(class
vtkRenderer*,class vtkActor*)" at line 83 (D:\Program
Files\vtk40\vtk-src-windows\Rendering\vtkPolyDataMapper.cxx)
in "vtkrendering.dll"
     ==> extern:"vtkOpenGLActor::Render(class
vtkRenderer*,class vtkMapper*)" at line 128
(D:\Program
Files\vtk40\vtk-src-windows\Rendering\vtkOpenGLActor.cxx)
in "vtkrendering.dll"
     ==> extern:"vtkLODActor::Render(class
vtkRenderer*,class vtkMapper*)" at line 205
(D:\Program
Files\vtk40\vtk-src-windows\Rendering\vtkLODActor.cxx)
in "vtkrendering.dll"
 

If the geometry is a simple low resolution Cylinder,
this Render can generate an allocation of up to 15K
!!! 

The way this vtkIdTypeArray::ResizeAndExtend function
works seams to be on a recursive pattern where the
memory allocation size is not determined based on the
need but by the double of the previously allocated
size.

For instance, on the first call, the size is 1. If
this isn’t enough (Which is always the case of course)
ResizeAndExtend is recalled with size 1 but will
generate an allocation of 1 + what is already
allocated. This becomes 2. And so on in a square
progression.

THE QUESTION:

Is there a way we can reclaim the unused memory
allocated through this mechanism? 

__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com



More information about the vtkusers mailing list