[PPL-devel] Memory allocation [Was: RE: Other issues]

Roberto Bagnara bagnara at cs.unipr.it
Thu Feb 14 09:10:14 CET 2002


Matt Carter wrote:
> 
> nisse at lysator.liu.se (Niels Möller) writes:
> >
> > There should be a list somewhere of "these are the things we want to
> > change next time we make a new version that isn't 100% compatible",
> > and deleting gmp_errno should be on that list. IMHO.
> 
> Add to that list, the ability to recover from memory allocation failures.
> 
> Currently, the GMP functions that call __gmp_allocate_func() generally do
> not check the return value for NULL.  Further, many of them return void, so
> changing them to return an out-of-memory error code would change the GMP
> API.
> 
> We use GMP in a mission critical system which regularly hits the limits of
> available memory, so GMP's behavior of requiring the application to
> terminate when out of memory was unacceptable.

This is indeed unacceptable in many situations.  And now that GMP
provides
a C++ interface, it is really desirable that a bad_alloc exception is
thrown
on memory allocation failure.  I would say that it is desirable
_independently_
from the application (in our specific application we cannot simply
afford not
to have it).  What we do now is to provide our own exception-throwing,
C++ allocation functions, installing them with

  mp_set_memory_functions(cxx_malloc, cxx_realloc, cxx_free);

and making sure GMP has been compiled with the "-fexceptions" flag of
GCC,
something that can be done by configuring GMP with a command like

  CPPFLAGS=-fexceptions my/path/to/gmp-4.0.1/configure ...

This seems to work quite well for us.  I know this solution is not
blessed
by the GMP maintainers but, as far as I can tell, there is no other
option
at the moment.
All the best

     Roberto

-- 
Prof. Roberto Bagnara
Computer Science Group
Department of Mathematics, University of Parma, Italy
http://www.cs.unipr.it/~bagnara/
mailto:bagnara at cs.unipr.it



More information about the PPL-devel mailing list