Re: garbage collector / lien avec le C et librairie strlib

From: Xavier Leroy (Xavier.Leroy@inria.fr)
Date: Fri Nov 13 1998 - 10:48:09 MET


Date: Fri, 13 Nov 1998 10:48:09 +0100
From: Xavier Leroy <Xavier.Leroy@inria.fr>
To: Maltey UPS <Francois.Maltey@enst-bretagne.fr>, caml-list@inria.fr
Subject: Re: garbage collector / lien avec le C et librairie strlib
In-Reply-To: <199811130534.GAA16498@audrey.enst-bretagne.fr>; from Maltey UPS on Fri, Nov 13, 1998 at 06:34:15AM +0100

[ 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/pub/old_caml_site/caml-list-ar/0345.html

Cordialement,

- Xavier Leroy



This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:16 MET