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)); freeall(); 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. -- 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/