Version française
Home     About     Download     Resources     Contact us    
Browse thread
garbage collector / lien avec le C et librairie strlib
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Xavier Leroy <Xavier.Leroy@i...>
Subject: Re: garbage collector / lien avec le C et librairie strlib
[ 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