[Top][All Lists]
[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