移动 GMP 编号

问题描述

我需要生成一个临时的大整数,然后,如果满足某些条件,将其移动到永久存储。这可以通过通常的函数来完成:

mpz_t temp;
mpz_init_set_str(temp,"99999999999999999999999999999999999999999");
// other things happen,including the allocation of perm
// as suitable permanent uninitialized storage
mpz_init_set(perm,temp);
mpz_clear(temp);

但这效率低下。 temp 指向一块堆内存来存储实际数字。然后 perm 分配自己的堆内存块来复制数字。然后 temp 的堆内存被释放。将堆内存的所有权从 temp 转移到 perm,然后避免清除 temp 会更有效率,但我不这样做请参阅文档中有关执行此操作的函数的任何提及。

这可以通过 memcpy(perm,temp,sizeof temp) 完成。从逻辑上讲,这应该可行,但我认为 API 并不能保证这一点,理想情况下,我更喜欢这样的解决方案。

mpz_swap 怎么样?文档说它有效地交换了两个值,这意味着它应该足以满足这种情况,但没有说明如果其中一个变量未初始化,它是否可以保证工作。

还有什么我遗漏的吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...