C++11 classes

Marc Glisse marc.glisse at inria.fr
Wed Nov 16 12:23:20 CET 2011

On Wed, 16 Nov 2011, Hans Aberg wrote:

> I drafted some C++11 classes integer etc., using move constructors and 
> assignment operators,

Something like that is likely to eventually get standardized in C++, but 
it may be a while yet. Note that without lazy initialization, gmp doesn't 
benefit from moves as much as it could.

> and then testing with a conversion of the pi program. In the most 
> optimized version, the overhead is less than 10% relative C or C compile 
> as C++,

I believe you can get 0 overhead with gmpxx. Also, the overhead tends to 
play a comparatively larger role with small numbers (just a couple limbs, 
where even a mpz_swap is non-negligible) as opposed to huge numbers.

> and the funny thing is that it does not call any constructors or 
> assignments at all. The reason is that either the compiler can optimize 
> them away, or in a few cases, one can do some rewriting.

I am not sure what you mean by that. When you write x=y*y, the compiler 
creates a temporary in which it puts the result of the multiplication and 
then it calls the move assignment. Or do you mean you rewrote the thing to 
never use * but only *= ?

Marc Glisse

More information about the gmp-discuss mailing list