__gmp_allocate_func and garbage collection

Torbjorn Granlund tg at gmplib.org
Tue May 5 10:41:49 CEST 2009


Marc Glisse <marc.glisse at normalesup.org> writes:

  some garbage collectors (take the one by Boehm-Demers-Weiser) provide
  2 malloc variants, one for pure "data", and one for stuff that may
  include pointers to garbage collected memory (the GC 0-initializes
  memory in this case).
  
  On some private mailing list, someone asked about using a garbage
  collector with gmp. I was thus wondering whether it was safe to use
  mp_set_memory_functions with the first ("pure data") variant of
  malloc, or whether we had to use the safe general variant.
  
  Scanning through the GMP sources, and excluding tune/, tests/ and
  tal-debug, I found only one problematic file (I may have missed
  others, obviously). In randlc2x.c, __gmp_allocate_func is used to
  allocate a structure that contains several mpz_t.
  
  So it looks like if you don't use random numbers, it is safe to use
  the fast allocation routine. It would be nice to have some more formal
  guarantees though. I understand this message would be more convincing
  with benchmarks, but now is not the best time, I just wanted to get
  the idea out before I forgot.

Are you saying that a struct that contains a pointer is the rub?  So,
any time we malloc an mpz_t (not just declare it) these garbage
collectors will become unhappy?

I really don't know where this happens in GMP, but it should be quite
rare.

-- 
Torbjörn


More information about the gmp-discuss mailing list