mpz_t的浅拷贝

时间:2012-02-24 14:53:07

标签: gmp shallow-copy

GMP提供初始化和分配mpz_t的方法。

对mpz_init_set(a,b)的调用将分配给b的内容。但是,我认为,这会在b上执行深层复制。

在我的项目中,我需要使用长达5,000,000的mpz_t数组(我们正在谈论640MB的内存),我正在使用的框架对这些类型执行各种赋值操作(我没有开发框架并在一个选项中重写它)。最近,我意识到在大多数赋值之后,b的值被清除,因此深度复制已经可以像它一样使用的值似乎是不自然的。但是,框架的接口不允许这样做(使用mpz_t周围的包装器)并且需要花费很多精力来改变它(我仍然可以改变一些基本的东西)。

我已经尝试过基于指向mpz_class的指针的解决方案,但令人惊讶的是,它根本没有提供性能提升。实际上它会降低执行速度(尽管不测试大型数组)。

我的问题是:我可以浅滩复制一个mpz_t吗?下面给出的例子

class somewrapper
{
    mpz_t v;
    somewrapper(mpz_t x)    //constructor: probably performing deep copy here as well
    {
        // the following line performs a deep copy(?) on x
        // but x is not used. why not shallow copy it?
        mpz_init_set(v, x);
    }
    somefunction() { }
}

0 个答案:

没有答案