guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gmp issues (long)


From: Marius Vollmer
Subject: Re: gmp issues (long)
Date: 25 Feb 2003 23:32:22 +0100
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2

Rob Browning <address@hidden> writes:

> Marius Vollmer <address@hidden> writes:
> 
> > I'm not so much worried about the size of an mpz_t but about the
> > fact that it requires an additional malloc.
> 
> OK, though an extra 6 bytes of overhead (actually 8 if you include the
> fact that mpzs can't allocate in 2-byte-increments) for a 6 byte
> integer still concerns me a bit, but perhaps it's OK -- and not
> worrying about it will certainly keep the code simpler.

If can reduce the overhead, that would be a good thing of course.  But
for the immediate performance problem, I wouldn't worry about it.

> So is there a way we can memcpy the mpz_t data into the double cell's
> three words, or would I need to pass the individual coerced pieces of
> the mpz_t to a call to scm_double_cell?

The way I understand things, GMP does not allocate the mpz_t's itself,
right?  Then you should be able to do things like

   SCM z = scm_double_cell (bignum_tag, 0, 0, 0);
   mpz_init (SCM_CELL_ADDR_1 (z));

where SCM_CELL_ADDR_1 or something similar needs to be added to gc.h.

> i.e. is it OK to presume cell words are guaranteed to be contiguous,

Yes.

> or are you required to go through the SCM_CELL_N interface?

We can make an additional interface (say SCM_CELL_BODY_ADDR) for
treating the last three slots of a double cell as one memory block.

> > There should be a test somewhere whether mpz_t really fits into this
> > space.  For now we can just wait for this test to fail, I'd say.
> 
> What would be the correct formulation of this test?  Would this be
> right?
> 
>   sizeof (mpz_t) <= 3 * sizeof (SCM)
> 
> or perhaps given scm_double_cell's prototype
> 
>   sizeof (mpz_t) <= 3 * sizeof (scm_t_bits)

Hmm, both look good to me... but the latter is probably more right.
When we have SCM_CELL_BODY_ADDR we can also have
SCM_SIZEOF_DOUBLE_CELL_BODY.

-- 
GPG: D5D4E405 - 2F9B BCCC 8527 692A 04E3  331E FAF8 226A D5D4 E405




reply via email to

[Prev in Thread] Current Thread [Next in Thread]