如何管理mpz_t数组

时间:2015-11-18 08:01:29

标签: c gmp

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

4 个答案:

答案 0 :(得分:5)

是的,您可以声明一个mpz_t数组。它在GMP info pages中明确提到:

mpz_t vec[20];

如果查看头文件,mpz_t将一个指针(_mp_d)保存到一个"四肢"的数组中。通过常规手段动态分配和调整大小。

至于古怪,当然:

typedef __mpz_struct mpz_t[1];

在GMP 5.1.3中,mpz_t__mpz_struct的单元素数组,因此声明元素照常工作。但是,只有一个指针传递给函数调用。好的伎俩,实际上。

答案 1 :(得分:5)

声明一个数组来存储多个$kernel = $app->make('Illuminate\Contracts\Http\Kernel'); 值是安全的。根据{{​​3}}:

  

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

答案 2 :(得分:3)

可以这样想:如果声明一个mtz_t变量,那么编译时编译器会静态分配该变量的空间。在运行期间,变量的大小怎么可能会改变?它不能,这意味着在数组中使用它是完全正常的。

答案 3 :(得分:3)

GNU MP 3.11 manual开始,以下几行相关。

  

GMP变量很小,只包含几个大小,并指向分配的数据。初始化GMP变量后,您无需担心空间分配。当变量尚不足够时,GMP中的所有函数都会自动分配额外的空间。但是,当存储较小的值时,它们不会减小空间。

所以,我想这可以回答你的问题。