Why do we put GMP allocations on GHC heaps?

Simon Marlow marlowsd at gmail.com
Thu Oct 24 08:24:16 UTC 2013

On 23/10/13 17:08, Bryan O'Sullivan wrote:
> On Wed, Oct 23, 2013 at 4:31 AM, Gergely Risko <gergely at risko.hu
> <mailto:gergely at risko.hu>> wrote:
>     I can understand that this may be slower in CPU, but can you please
>     elaborate why would it be worse in memory, how the frees wouldn't happen
>     in a "timely manner"?  I thought finalisers are called when the
>     referencee is GCd, so if we free the mpz in the callback, then where are
>     we going wrong?
> There is no guarantee that finalizers will be called at all, much less
> that they will be called in a timely manner. This is a general and
> well-known property of all garbage collectors, not something unique to GHC.

This is true, but I would add that C finalizers are rather more prompt 
and reliable than Haskell finalizers, since we added special support for 
them a couple of versions ago.  C finalizers are run directly by the GC 
rather than in separate threads, and we run all the outstanding ones 
before the program terminates.


More information about the ghc-devs mailing list