[ITK] [ITK-users] How to make ITK-binaries NOT ignore kernel out of memory messages?
    Luis Ibanez 
    luis.ibanez at kitware.com
       
    Sun Jun  8 09:51:07 EDT 2014
    
    
  
Roman,
Could you please share with the list an example
of a program where you are observing this behavior ?
In particular, we would like to see if this is occurring with
Image filters, or rather with other types of ITK objects.
The itk::Image does listen to the (potential) memory allocation messages
(that is, the bad_alloc exception).
The itk::Image class uses a helper class to store the pixel data.
This helper is the:
itk::ImportImageContainer
https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkImportImageContainer.h
and its memory allocation is typically done in the AllocateElements()
function in line:
https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkImportImageContainer.hxx#L173
the code looks like
  TElement *data;
  try
    {
    if ( UseDefaultConstructor )
      {
      data = new TElement[size](); //POD types initialized to 0, others use
default constructor.
      }
    else
      {
      data = new TElement[size]; //Faster but uninitialized
      }
    }
  catch ( ... )
    {
    data = ITK_NULLPTR;
    }
  if ( !data )
    {
    // We cannot construct an error string here because we may be out
    // of memory.  Do not use the exception macro.
    throw MemoryAllocationError(__FILE__, __LINE__,
                                "Failed to allocate memory for image.",
                                ITK_LOCATION);
    }
  return data;
As you can see, the case of exceptions is managed in that function.
Here is an example of a test program demonstrating that ITK image
will throw exceptions when allocating memory beyond limits.
#include "itkImage.h"
#include <iostream>
int main(int argc, char * argv[] )
{
  if( argc < 2 )
    {
    std::cerr << "Missing arguments" << std::endl;
    return 1;
    }
  typedef itk::Image< unsigned short, 3 > ImageType;
  ImageType::Pointer image = ImageType::New();
  ImageType::RegionType region;
  ImageType::SizeType size;
  size_t side = atoi( argv[1] );
  size[0] = side;
  size[1] = side;
  size[2] = side;
  region.SetSize( size );
  image->SetRegions( region );
  try
    {
    image->Allocate();
    }
  catch( std::exception & excp )
    {
    std::cerr << excp.what() << std::endl;
    return 1;
    }
  std::cout << "ITK Hello World !" << std::endl;
  return 0;
}
and what happens when executing in an Ubuntu Linux machine with 32GB or RAM
$ ./HelloWorld  1000
ITK Hello World !
$ ./HelloWorld  1000000
/home/ibanez/src/ITK/Modules/Core/Common/include/itkImportImageContainer.hxx:199:
Failed to allocate memory for image.
Please share with the list a minimal example of the problem you are
observing,
and in this way we will be able to help track the issue.
   Thanks
       Luis
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20140608/dac67dd1/attachment-0002.html>
-------------- next part --------------
# This is the root ITK CMakeLists file.
cmake_minimum_required(VERSION 2.4)
if(COMMAND CMAKE_POLICY)
  cmake_policy(SET CMP0003 NEW)
endif()
# This project is designed to be built outside the Insight source tree.
project(HelloWorld)
# Find ITK.
find_package(ITK REQUIRED)
include(${ITK_USE_FILE})
add_executable(HelloWorld HelloWorld.cxx )
target_link_libraries(HelloWorld ${ITK_LIBRARIES})
-------------- next part --------------
A non-text attachment was scrubbed...
Name: HelloWorld.cxx
Type: text/x-c++src
Size: 1471 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/community/attachments/20140608/dac67dd1/attachment-0002.cxx>
-------------- next part --------------
_____________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php
Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ
Follow this link to subscribe/unsubscribe:
http://www.itk.org/mailman/listinfo/insight-users
    
    
More information about the Community
mailing list