Lazy mpz allocation
Niels Möller
nisse at lysator.liu.se
Mon Aug 31 07:01:31 UTC 2015
tg at gmplib.org (Torbjörn Granlund) writes:
> "Marco Bodrato" <bodrato at mail.dm.unipi.it> writes:
>
> If we change (I'd agree) mpz_init into
>
> void
> 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.
A use case I had a couple of years ago is initialization of a struct
containing a couple of mpz_t values together with other stuff, and with
the above change one could initialize a complete such a struct using a
single memcpy.
Regards,
/Niels
--
Niels Möller. PGP-encrypted email is preferred. Keyid C0B98E26.
Internet email is subject to wholesale government surveillance.
More information about the gmp-devel
mailing list