假设我知道我的号码可能是多少位数(并且我想第一次分配正确的空间量,我该如何计算我需要分配的字节数?我想我总是可以将值设置为是1*10^(num digits)
然后0
之后,但感觉不对,就像我在打败目标一样。
为清楚起见进行编辑:我想知道存储带n
十进制数字的整数需要多少字节,以及 MPIR 的实现是否会影响这一点。@JonathonLeffler 在他的回答的评论中提供了正确的答案。
由于有一个 MPIR 标签,这可能是关于MPIR的,它是 GMP 的一个分支。在当前文档(仅限 PDF — 没有在线 HTML)中,在“初始化整数”标题下,您可以找到:
void mpz_init2(mpz_t integer, mp_bitcnt_t n)
Initialize
integer
,为n
位留出空间,并将其值设置为 0。n
只是初始空间integer
,如有必要,将按正常方式自动增长,以供后续存储的值使用。mpz_init2
如果预先知道最大大小,则可以避免这种重新分配。
如果这是针对GMP的,您可以阅读有关初始化整数的在线手册以查找:
- 功能:
void mpz_init2(mpz_t x, mp_bitcnt_t n)
初始化
x
,为n
-bit 数字留出空间,并将其值设置为 0。调用此函数而不是mpz_init
ormpz_inits
从来没有必要;GMP 会在需要时自动处理重新分配。虽然
n
定义了初始空间,x
但如果需要,会以正常方式自动增长,用于存储后续值。mpz_init2
如果预先知道最大大小,则可以避免这种重新分配。在为手术做准备时,GMP 通常会分配比最终需要更多的肢体。为确保 GMP 不会对 执行重新分配
x
,您需要将 mp_limb_t 中的位数添加到n
.
两者本质上是一样的。