(Courriels de diversion: <tentants@extrapoleriez-cloturaient.com> <mediteriez@hic-infligees.com> <harcellent@reaccoutumerions-ondulaient.com> <serpentait@excediez-perceptions.com> <ephemeres@visiterais-debouchais.com> <inopportunites@enerveras-insere.com> <generatif@decontenanceras-meconnaîtrez.com> <tachait@subodoreriez-surchauffions.com> <demarchai@forgeriez-tyranniques.com> <maturation@psychoses-indispose.com> )
[J'ai effacé par mégarde le message initial, alors je réponds ici] Le 2 Jan, Philippe Coulonges écrit : > Le Thu, 02 Jan 2003 15:26:40 +0100 (CET) > Laurent <laurent.marquez@free.fr> écrivait :> >> -> L'option ptr permet de specifier un repository pour >> l'instantiation des templates. > Pour "option" et "ptr" je n'ai pas pu déterminer l'intention de langue, > mais ni "repository", ni "instantiation" ni "templates" ne sont dans > mon Larousse. > > Allez, encore un petit effort pour la communication, la solution à tes > problèmes approchera tellement plus vite. En fait, c'est assez clair pour quelqu'un susceptible d'apporter une réponse (et qui s'est frotté à divers compilateurs C++ commerciaux). Le repositoire dont il est question est en fait un cache dans lequel le compilateur émet une version unique de chaque instanciation de classe template, quel que soit le nombre d'instanciations identiques demandées. Il s'agit là donc d'une question d'implantation d'une fonctionnalité du langage. Pour mieux comprendre le problème, imaginons que nous ayons une déclaration de classe template (c'est à dire paramétrée par un type ou une constante) dans un fichier d'en-tête boulou.h : template<class T, int I> class boulou { ... } puis deux instanciations dans des unités de compilation différentes : tralala.C : typedef class boulou<int, 3> tralala; itou.C : typedef class boulou<int, 3> itou; Un compilateur à repositoire (oui, j'aime bien ce néologisme) va utiliser le cache pour ne générer qu'une seule fois le code de l'instanciation boulou<int, 3> de la classe paramétrée. D'autres méthodes sont possibles. Les anciens g++ généraient autant de fois le code de boulou<int, 3> qu'il y a d'unités de compilation qui en ont besoin. C'est pas top, côté taille du code, quand ont utilise lourdement les templates (comme il est devenu courant avec la STL : Standard Template Library). Les anciens g++ permettent également de ne générer le code qu'une seule fois (option -fexternal-templates), mais il faut gérer cela soi-même à la main avec des pragma. Les g++ récents (avec un ld récent) génèrent autant de fois le code de boulou<int, 3> qu'il y a d'unités de compilation qui en ont besoin, mais signalent ce code à l'éditeur de lien, devenu suffisamment intelligent pour éliminer les doublons dans le binaire final, sans qu'il y ait besoin de rien faire. Mais il n'y a jamais eu d'équivalent du repositoire dans g++ (voir cependant l'option -frepo qui fournit un mécanisme dont la fonction s'en approche). Donc, Laurent, il faut en savoir plus, en particulier sur la version de g++ et de ld que tu utilises, ainsi que sur l'OS sur lequel tu compiles. -- Marc Thirion | Ramonville Saint-Agne, France Projet Internet et Citoyenneté : http://www.le-pic.org/ --------------------------------------------------------------------- Aide sur la liste: <URL:mailto:linux-31-help@CULTe.org>Le CULTe sur le web: <URL:http://www.CULTe.org/>