Pour les pros -> Incidence de la STL sur la taille du code. [Résolu]

Signaler
Messages postés
9
Date d'inscription
vendredi 9 septembre 2005
Statut
Membre
Dernière intervention
20 décembre 2005
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
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

Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
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+
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
La STL ne se trouve dans un code que si on l'y a mise.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Mais un simple #include va faire grossir l'image, qu'on l'utilise ou pas
Messages postés
9
Date d'inscription
vendredi 9 septembre 2005
Statut
Membre
Dernière intervention
20 décembre 2005

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.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
9
Date d'inscription
vendredi 9 septembre 2005
Statut
Membre
Dernière intervention
20 décembre 2005

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 ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Ben non...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Comme dit plus haut, NON jamais.
Tu devais l'avoir déjà inclus autrement.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
9
Date d'inscription
vendredi 9 septembre 2005
Statut
Membre
Dernière intervention
20 décembre 2005

merci a tous et surtout cosmobob qui a répondu à mes interrogations :)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Mais en Multi threaded DLL, dépendances à deux autres DLL
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++