[Gc] Silently fails to allocate memory?

Basile Starynkevitch basile at starynkevitch.net
Sat Apr 13 13:24:32 PDT 2013


On Sat, Apr 13, 2013 at 02:57:47PM -0500, The Devils Jester wrote:
> On Sat, Apr 13, 2013 at 12:05 PM, Bruce Hoult <bruce at hoult.org> wrote:
> 
> > b is allocated by the GC. The memory used internally by a to store your
> > myclass*'s is not.
> >
> > See other messages today for how to fix that.
> >
> >
> While that is something important to consider (and might have caused issues
> later on in my application), I am fairly certain that in the current
> testing process there are no vectors being used / created / resized within
> the loop.  For the sake of argument though, even if there are, would not
> the worse case scenario be exactly the same as just disabling libgc
> entirely?  This is what I keep coming back to.  With libgc disabled,
> everything works properly (other than the steadily increasing memory leak).
>  It does not run out of memory,  and all objects are created as intended.
> 
> If I am doing something wrong, what could I possibly do that would result
> in this situation?

Use everywhere the GC. So either redefine explicitly malloc as GC_malloc (and be sure your malloc is called even 
from inside the libc) or at the very least use gc_allocator to ensure that all vectors
(even those outside of the loop you are expecting to be at issue) are GC allocated.
In a previous recent email to this list I explained how to get STL vectors which use the GC_malloc
even for their internal data.


Also, if you have a working, GC-less, variant of your program (malloc based, or new+delete based), be sure 
to test with valgrind that it does not leak memory.

Cheers.

-- 
Basile STARYNKEVITCH         http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mines, sont seulement les miennes} ***


More information about the Gc mailing list