我正在使用GMP,我需要一个notifications
的数组。 user
给出了16,但我存储的数字要大得多。 mpz_t
是否“成长”,我。即我是否需要分配更多内存并允许就地增长,或者GMP是否在其他地方为其分配空间并保留引用(在这种情况下,我假设,我不需要采取任何特殊的预防措施。)
答案 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中的所有函数都会自动分配额外的空间。但是,当存储较小的值时,它们不会减小空间。
所以,我想这可以回答你的问题。