Pour les pros -> Incidence de la STL sur la taille du code.

Résolu
lordkraken Messages postés 9 Date d'inscription vendredi 9 septembre 2005 Statut Membre Dernière intervention 20 décembre 2005 - 20 déc. 2005 à 11:46
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 20 déc. 2005 à 15:42
Bonjour,

j'essaie de minimiser la taille du code. d'une petite DLL que je programme actuellement.

Or j'utilise depuis hier des vector, issus directement de la classe STL.
Et là, au surprise, j'ai constaté que la taille de ma DLL n'a pas bougé d'un iota.

Que dois je en conclure ?

Que la STL est toujours liée au code compilé ?
Que la STL est chargée dynamiquement lors de l'exécution de mon code ?

Enfin bref, quelle incidence l'utilisation de la STL a sur mon code ? Temp d'exécution ? Espace mémoire ?

merci :)

12 réponses

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
20 déc. 2005 à 14:28
salut,
la taille depend aussi d'une option de compilation.
sous v7, (sous vc6 ca doit etre a peu pres pareil), dans les settings de ton projet, tu vas dans C/C++, Code Generation, et RunTime library.
si le choix est MultiThreaded DLL, une partie du code de la STL (la partie non template en fait, comme les assignations, etc.) ne sera pas inclus dans ton exe mais sera appelé via une DLL système (msvcprt60.dll sous vc6, msvcprt71.dll sous vs7.1).
si le choix est MultiThreaded ou SingleThreaded, tout le code necessaire sera injecté dans ton exe, et il peut alors legerement grossir.
A noter que l'utilisation de n'est pas une utilisation de la STL mais de la librairie standard du c++ (ce qui est différent, la STL etant contenu dans la lib standard mais pas l'inverse) -> inclure iostream peut faire grossir significativement ton exe par contre, car il y a plein de fonctions virtuelles etc. dont le code doit donc etre ajouté ds l'exe.
L'utilisation de la STL (la partie template de la lib standard) ne fait finalement pas trop grossir les exe en general, car les seules fonctions dont tu fais appel dans ton code sont connues a la compilation, et seules celles la sont ajoutées.

allez, a+
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 déc. 2005 à 12:16
La STL ne se trouve dans un code que si on l'y a mise.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
20 déc. 2005 à 13:01
Mais un simple #include va faire grossir l'image, qu'on l'utilise ou pas
0
lordkraken Messages postés 9 Date d'inscription vendredi 9 septembre 2005 Statut Membre Dernière intervention 20 décembre 2005
20 déc. 2005 à 13:29
j'utilise la classe vector et j'inclu uniquement #include <vector>

puis j'utilise évidemment une classe vector.

Pourtant la taille compilée de la dll ne change pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
20 déc. 2005 à 13:35
Elle ne change pas par rapport à quoi? Si avant tu incluais déja vector (mais sans l'utiliser dans ton code), c'est normal que la taille ne change pas
0
lordkraken Messages postés 9 Date d'inscription vendredi 9 septembre 2005 Statut Membre Dernière intervention 20 décembre 2005
20 déc. 2005 à 14:07
non justement tout le sens de ma question est la

je n'ai inclu le header vector que lors de l utilisation de la classe vector.

Sans #include <vector> 884 KB
Avec #include <vector> 884 KB

Alors les headers windows contiendrait t il deja la STL ou alors visual C++ linkerait il automatiquement la STL ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
20 déc. 2005 à 14:09
Ben non...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 déc. 2005 à 14:09
Comme dit plus haut, NON jamais.
Tu devais l'avoir déjà inclus autrement.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
lordkraken Messages postés 9 Date d'inscription vendredi 9 septembre 2005 Statut Membre Dernière intervention 20 décembre 2005
20 déc. 2005 à 14:53
merci a tous et surtout cosmobob qui a répondu à mes interrogations :)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 déc. 2005 à 15:06
Je viens de compiler en Multi threaded (VS 2005 pas d'autre choix):
Dépendances: Kernel32.dll et User32.dll, absolument rien d'autre.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
20 déc. 2005 à 15:11
Mais en Multi threaded DLL, dépendances à deux autres DLL
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 déc. 2005 à 15:42
en DLL avec 2 funcs exportées on a Msvcr80.dll de dépendance en 6 Ko sans faire sauter le CRT.
C'était une bonne occas, je n'avais pas encore eu à le faire sur VS 2005.

Résultat des courses: virer le CRT fait encore gagner 1 Ko et aucun runtime à livrer.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
Rejoignez-nous