From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id MAA18844 for caml-redistribution; Fri, 13 Nov 1998 12:22:57 +0100 (MET) Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id KAA20454 for ; Fri, 13 Nov 1998 10:48:12 +0100 (MET) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by concorde.inria.fr (8.8.7/8.8.7) with ESMTP id KAA22289; Fri, 13 Nov 1998 10:48:10 +0100 (MET) Received: (from xleroy@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id KAA21061; Fri, 13 Nov 1998 10:48:09 +0100 (MET) Message-ID: <19981113104809.21627@pauillac.inria.fr> Date: Fri, 13 Nov 1998 10:48:09 +0100 From: Xavier Leroy To: Maltey UPS , caml-list@inria.fr Subject: Re: garbage collector / lien avec le C et librairie strlib References: <199811130534.GAA16498@audrey.enst-bretagne.fr> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Mailer: Mutt 0.89.1 In-Reply-To: <199811130534.GAA16498@audrey.enst-bretagne.fr>; from Maltey UPS on Fri, Nov 13, 1998 at 06:34:15AM +0100 Sender: weis [ English summary: finalized blocks allow the Caml garbage collector to free data allocated with malloc in C libraries.] > J'ai l'impression que le programme regex.c (qui crée des automates > de reconnaissance d'expressions régulières) fait des "malloc". > Je ne sais pas si (ni comment comprendre) caml "récupère" la mémoire > lors d'un "garbage collector" lorsque, après avoir créé une expression > réguliere (avec str__regexp) le programme ne l'utilise plus et elle > n'est plus accessible. Il s'agit d'un trait malheureusement non documenté du GC de Caml Light et Objective Caml: certains blocs du tas Caml peuvent porter une fonction de "finalisation" qui est appelée lorsque le GC libère le bloc Caml en question. Typiquement, str__regexp alloue un tel bloc et stocke dedans le pointeur vers la structure allouée par malloc() renvoyée par la bibliothèque regex.c. La fonction de finalisation fait alors l'équivalent de free() sur le pointeur C contenu dans le bloc finalisé. On peut ainsi coupler le GC automatique de Caml avec une discipline de déallocation explicite telle que suivie par la plupart des bibliothèques C. Pour plus d'infos: http://caml.inria.fr/caml-list-ar/0345.html Cordialement, - Xavier Leroy