Next: Autoconf, Previous: Assignment Modes, Up: MPRIA Basics [Index]
Basically MPRIA mimics and relays to the GNU MP memory management, except notably for temporary use (see Memory Management in The GNU MP Manual).
The mpq_t
type is for the implementation of the mpri_t
type what
the mpz_t
type is for the implementation of the mpq_t
type itself:
mpri_t
variables never reduce their allocated space, as mpq_t
variables.
All memory is allocated, reallocated and freed by passing on
to the GNU MP memory functions as grabbed from mp_get_memory_functions
(see Custom Allocation in The GNU MP Manual).
While GMP uses temporary memory on the stack (via alloca
),
MPRIA creates, passes along and intensively reuses workspaces for internal computation;
the various created workspaces are freed before exiting
with the help of the standard C atexit
function
(see Cleanups on Exit in The GNU C Library Reference Manual),
therefore no memory leaks should be reported by tools like valgrind
(http://valgrind.org/).
Teething Note: At the time of writing, this internal workspace machinery is robust but global, read not yet thread safe, and no high-level function is yet implemented to free the created workspaces, or part of them, from time to time.