Karim BELABAS on Sat, 18 Jan 2003 17:23:10 +0100 (MET)

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: how to free pari's memory

On Thu, 16 Jan 2003, Ramón Casero Cañas wrote:
> I initialize and use a PARI 2.1.4 stack in a function of a C++ program. I
> thought that after returning from the function, the stack and pari data would
> be freed.

How so ? _If_ PARI had been written in C++ (which it isn't), some default
destructors would be called for declared objets when leaving scope, but
there's no way this could undo all the initializations [ would prevent the
library itself from functionning properly ! ]

Anyway, if you want to use PARI, then remove it completely [ not a good idea
if you do this more than once : it involves a very significant overhead ],
you have to do it by hand:

  void freeall(void);
  void pari_sig_init(void (*f)(int));

  if (INIT_SIG) pari_sig_init(SIG_DFL);

None of the above is documented (it's the first time the problem of unloading
the library is raised...)

> But I have noticed that if I press CTRL-C while the program is
> running (after returning from the function), I get a
>   ***   user interrupt.
>   ***   Error in the PARI system. End of program.
> Is there a way to delete the stack. I suposse this is not a garbage
> collection.

Not related to stack. PARI traps a number of signals for its own use, and you
want to restore default behaviour. Either use SIG_DFL as above, or
re-initialize your own signal handler [ no way to recover the one PARI
replaced using PARI functions, I'm afraid ]

Good luck,

Karim Belabas                    Tel: (+33) (0)1 69 15 57 48
Dép. de Mathématiques, Bât. 425  Fax: (+33) (0)1 69 15 60 19
Université Paris-Sud             Email: Karim.Belabas@math.u-psud.fr
F-91405 Orsay (France)           http://www.math.u-psud.fr/~belabas/
PARI/GP Home Page: http://www.parigp-home.de/