微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

移动 GMP 编号

如何解决移动 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 举报,一经查实,本站将立刻删除。