如何管理mpz_t数组

Jan*_*s F 4 c gmp

我正在使用GMP,我需要一个数组mpz_t.sizeof(mpz_t)给出了16,但是我存储的数字要大得多.是否mpz_t"到位"增长,即我是否需要分配更多内存并允许就地增长,或者GMP是否在其他地方为其分配空间并保留引用(在这种情况下,我假设,我不会必须采取任何特殊的预防措施.)

dhk*_*hke 5

是的,你可以声明一个数组mpz_t.它在GMP信息页面中明确提到:

mpz_t vec[20];
Run Code Online (Sandbox Code Playgroud)

如果查看头文件,则将mpz_t指针(_mp_d)保存到"肢体"数组中,该数组通过常规方法动态分配和调整大小.

至于怪异,当然:

typedef __mpz_struct mpz_t[1];
Run Code Online (Sandbox Code Playgroud)

在GMP 5.1.3中,a mpz_t是一个单元素数组__mpz_struct,因此声明一个元素可以正常工作.但是,只有一个指针传递给函数调用.其实很好的伎俩.


aut*_*tic 5

声明一个数组来存储许多mpz_t值是安全的.根据GNU MP手册:

mpz_t实际上是实现为某种结构类型的单元素数组.这就是为什么使用它来声明变量给出一个具有GMP需要的字段的对象,然后使用它作为参数传递指向该对象的指针.请注意,a的实际内容mpz_t仅供内部使用,如果您希望代码与未来的GMP版本兼容,则不应直接访问它们.