Lazy mpz allocation

Torbjörn Granlund tg at gmplib.org
Mon Aug 31 16:27:30 UTC 2015


  >   mpz_init (mpz_ptr x)
  >   {
  >     ALLOC (x) = 0; /* ZERO, any MPZ_REALLOC will allocate */
  >     PTR (x) = & static_const_limb_shared_by_all_instances;
  >     SIZ (x) = 0;
  >   }
  >   
  > I suppose we should do this!
  
  Me too! Actually, mpz_init could then be
  
    static const mp_limb_t dummy_limb = 0;
    #define INITIAL_MPZ {0, 0, &dummy_limb};
    static const mpz_t initial_mpz = INITIAL_MPZ;  
  
    void
    mpz_init (mpz_ptr x)
    {
       *x = initial_mpz; /* Inline or memcpy, depending on compiler */
    }
  
  and later on we can consider some public interface for initializing an
  mpz without any library call. 
  
I actually think this is inferior to Marco's variant; just writing to
memory (or cache) is faster than reading + writing...

(We should use 'attribute ((visibility ("hidden")))' for the the
constant zero limbs at any rate.  I'll commit a basic patch for that
soonish.)


-- 
Torbjörn
Please encrypt, key id 0xC8601622


More information about the gmp-devel mailing list