Best way to import without copy
Julien D Arques
acc.gccquestions at gmail.com
Thu May 4 13:53:41 CEST 2023
Actually, after trying, the mpz_roinit_n won't make it because doing
something like this:
mpz_class tmp;
std::array <u64, 1> m{10};
mpz_roinit_n( tmp.get_mpz_t(), &m[0], m.size());
std::cout << tmp << std::endl;
tmp += 1;
std::cout << tmp << std::endl;
will yield 10 for the first call but a garbage value (I guess) for the
second.
The fact that get_mpz_t() returns a const and the function is called ROINIT
makes me think that it won't make it..
I am surprised GMP doesn't have a no copy mechanism if we can guarantee
that we have a properly made buffer on input, available for output as well.
On Thu, 4 May 2023 at 08:03, Julien D Arques <acc.gccquestions at gmail.com>
wrote:
> thanks Marc
>
> On Thu, 4 May 2023 at 00:25, Marc Glisse <marc.glisse at inria.fr> wrote:
>
>> On Wed, 3 May 2023, Julien D Arques wrote:
>>
>> > I currently use mpz_import, but reading the source code, it appears that
>> > gmp copies the already allocated buffer I give it.
>> > That's double the work, and the said buffer is big.
>>
>> Depending on endianness and other criteria, this might not be a simple
>> copy.
>>
>> > Is there a correct/reliable way to avoid that?
>>
>> If you are certain the format is right, you could try mpz_roinit_n.
>>
>> --
>> Marc Glisse
>>
>
More information about the gmp-discuss
mailing list