previous up next top index
Précédent : Interprétation abstraite interprocédurale sur des Remonter : Analyse de code Suivant : Analyse de flot de données


Complexité de l'analyse d'échappement (escape analysis ) et garbage-collection statique

Participants : Alain Deutsch, Bruno Blanchet

L'analyse d'échappement (escape analysis) est une interprétation abstraite pour programmes fonctionnels fortement typés élaborée par Park et Goldberg. Cette analyse permet de remplacer statiquement des allocations en tas par des allocations en pile, ce qui diminue le coût de la garbage-collection et améliore la localité des données (cache en particulier).

Park & Goldberg ont donné une borne de complexité exponentielle pour l'analyse d'une fonction du premier ordre, par analogie avec la strictness analysis. Nous montrons que cette borne supérieure est une approximation très grossière : nous exhibons en effet une borne quasi-linéaire (selon la terminologie de Gurevitch & Shelah) en tex2html_wrap_inline298 . Toutefois, cette borne n'est valide qu'au premier ordre : nous avons ensuite montré que l'escape analysis devient exponentielle au second ordre, et plus précisément DEXPTIME-difficile. Nous avons réalisé un premier prototype qui est intégré à une version expérimentale du compilateur CAML CSL de Xavier Leroy (projet CRISTAL). Ce travail fait l'objet d'une communication à POPL'97 [2].

Bruno Blanchet, dans le cadre de son DEA, a ensuite étendu ce prototype de façon importante en traitant les type inductifs, les constructions impératives et (avec approximations) les fonctions d'ordre supérieur, ainsi qu'en donnant une sémantique exacte non instrumentée. Les résultats obtenus par cette analyse sont tout à fait satisfaisants. L'expérimentation, sur des programmes comme le compilateur CAML CSL ou le système COQ (environ 60 000 lignes), a montré la faisabilité de l'analyse. Son coût permet de l'appliquer à tous les programmes au prix d'un surcoût à la compilation tout à fait acceptable, qui ne dépasse pas 20%. Elle a montré aussi l'intérêt de l'allocation en pile, puisqu'on obtient des gains de temps importants : souvent 5 à 20%, quelquefois plus dans des cas particulièrement favorables.