Le linker (VC6 entreprise ou VS2003 architecte) n'est il pas
censé supprimer le code mort dors du link Final ?
Si je regarde dans l'exe générer je retrouve des chaines de caractères
ou des valeurs (int ou int64) initialisées dans des fonctions qui ne sont
pas appelées, non ? problème d'option de compile/ de link ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Vincent Burel
"Olivier" wrote in message news:dg8k5j$ppg$
Bonjour,
Le linker (VC6 entreprise ou VS2003 architecte) n'est il pas censé supprimer le code mort dors du link Final ? Si je regarde dans l'exe générer je retrouve des chaines de caractères ou des valeurs (int ou int64) initialisées dans des fonctions qui ne sont pas appelées, non ? problème d'option de compile/ de link ?
Merci,
non, ce que vous définissez reste dans le BIN final ... il manquerait plus que ca. De plus la notion de code mort n'est pas détectable fiablement par le compilo... par un jeu de pointeur calculés, on peut utiliser une fonction qui pour le compilo semble être inutile... idem pour les constantes.
Par contre ca fait des années que je souhaite que le MSVC puisse dire ce qui semble être inutilisé dans le source (comme il le fait avec les locals : pourquoi pas avec les globales, membres de structure, fonctions etc...)... Est-ce que ca existe maintenant !? Je n'en ai pas l'impression...
VB
"Olivier" <olive@nospam.fr> wrote in message
news:dg8k5j$ppg$1@aphrodite.grec.isp.9tel.net...
Bonjour,
Le linker (VC6 entreprise ou VS2003 architecte) n'est il pas
censé supprimer le code mort dors du link Final ?
Si je regarde dans l'exe générer je retrouve des chaines de caractères
ou des valeurs (int ou int64) initialisées dans des fonctions qui ne sont
pas appelées, non ? problème d'option de compile/ de link ?
Merci,
non, ce que vous définissez reste dans le BIN final ... il manquerait plus
que ca. De plus la notion de code mort n'est pas détectable fiablement par
le compilo... par un jeu de pointeur calculés, on peut utiliser une fonction
qui pour le compilo semble être inutile... idem pour les constantes.
Par contre ca fait des années que je souhaite que le MSVC puisse dire ce qui
semble être inutilisé dans le source (comme il le fait avec les locals :
pourquoi pas avec les globales, membres de structure, fonctions etc...)...
Est-ce que ca existe maintenant !? Je n'en ai pas l'impression...
Le linker (VC6 entreprise ou VS2003 architecte) n'est il pas censé supprimer le code mort dors du link Final ? Si je regarde dans l'exe générer je retrouve des chaines de caractères ou des valeurs (int ou int64) initialisées dans des fonctions qui ne sont pas appelées, non ? problème d'option de compile/ de link ?
Merci,
non, ce que vous définissez reste dans le BIN final ... il manquerait plus que ca. De plus la notion de code mort n'est pas détectable fiablement par le compilo... par un jeu de pointeur calculés, on peut utiliser une fonction qui pour le compilo semble être inutile... idem pour les constantes.
Par contre ca fait des années que je souhaite que le MSVC puisse dire ce qui semble être inutilisé dans le source (comme il le fait avec les locals : pourquoi pas avec les globales, membres de structure, fonctions etc...)... Est-ce que ca existe maintenant !? Je n'en ai pas l'impression...
VB
Olivier
Dans mon cas ce serait des fonctions completes et pas des parties de code dans une fonction.
Bonjour,
Le linker (VC6 entreprise ou VS2003 architecte) n'est il pas censé supprimer le code mort dors du link Final ? Si je regarde dans l'exe générer je retrouve des chaines de caractères ou des valeurs (int ou int64) initialisées dans des fonctions qui ne sont pas appelées, non ? problème d'option de compile/ de link ?
Merci,
non, ce que vous définissez reste dans le BIN final ... il manquerait plus que ca. De plus la notion de code mort n'est pas détectable fiablement par le compilo... par un jeu de pointeur calculés, on peut utiliser une fonction qui pour le compilo semble être inutile... idem pour les constantes.
Par contre ca fait des années que je souhaite que le MSVC puisse dire ce qui semble être inutilisé dans le source (comme il le fait avec les locals : pourquoi pas avec les globales, membres de structure, fonctions etc...)... Est-ce que ca existe maintenant !? Je n'en ai pas l'impression...
VB
Dans mon cas ce serait des fonctions completes et pas des parties de code
dans une
fonction.
Bonjour,
Le linker (VC6 entreprise ou VS2003 architecte) n'est il pas
censé supprimer le code mort dors du link Final ?
Si je regarde dans l'exe générer je retrouve des chaines de caractères
ou des valeurs (int ou int64) initialisées dans des fonctions qui ne
sont
pas appelées, non ? problème d'option de compile/ de link ?
Merci,
non, ce que vous définissez reste dans le BIN final ... il manquerait plus
que ca. De plus la notion de code mort n'est pas détectable fiablement par
le compilo... par un jeu de pointeur calculés, on peut utiliser une
fonction
qui pour le compilo semble être inutile... idem pour les constantes.
Par contre ca fait des années que je souhaite que le MSVC puisse dire ce
qui
semble être inutilisé dans le source (comme il le fait avec les locals :
pourquoi pas avec les globales, membres de structure, fonctions etc...)...
Est-ce que ca existe maintenant !? Je n'en ai pas l'impression...
Dans mon cas ce serait des fonctions completes et pas des parties de code dans une fonction.
Bonjour,
Le linker (VC6 entreprise ou VS2003 architecte) n'est il pas censé supprimer le code mort dors du link Final ? Si je regarde dans l'exe générer je retrouve des chaines de caractères ou des valeurs (int ou int64) initialisées dans des fonctions qui ne sont pas appelées, non ? problème d'option de compile/ de link ?
Merci,
non, ce que vous définissez reste dans le BIN final ... il manquerait plus que ca. De plus la notion de code mort n'est pas détectable fiablement par le compilo... par un jeu de pointeur calculés, on peut utiliser une fonction qui pour le compilo semble être inutile... idem pour les constantes.
Par contre ca fait des années que je souhaite que le MSVC puisse dire ce qui semble être inutilisé dans le source (comme il le fait avec les locals : pourquoi pas avec les globales, membres de structure, fonctions etc...)... Est-ce que ca existe maintenant !? Je n'en ai pas l'impression...
VB
Vincent Burel
"Olivier" wrote in message news:dg8soe$ca4$
Dans mon cas ce serait des fonctions completes et pas des parties de code dans une fonction.
oui, c'est ce dont je parlais. Le compilateur ne peut pas décider d'enlever une fonction parce que soi-disant "inutilisé explicitement"... Une fonction peut être utilisée implicitement sans que le compilateur puisse le savoir... donc il ne l'enlève pas.
VB
"Olivier" <olive@nospam.fr> wrote in message
news:dg8soe$ca4$1@apollon.grec.isp.9tel.net...
Dans mon cas ce serait des fonctions completes et pas des parties de code
dans une
fonction.
oui, c'est ce dont je parlais.
Le compilateur ne peut pas décider d'enlever une fonction parce que
soi-disant "inutilisé explicitement"... Une fonction peut être utilisée
implicitement sans que le compilateur puisse le savoir... donc il ne
l'enlève pas.
Dans mon cas ce serait des fonctions completes et pas des parties de code dans une fonction.
oui, c'est ce dont je parlais. Le compilateur ne peut pas décider d'enlever une fonction parce que soi-disant "inutilisé explicitement"... Une fonction peut être utilisée implicitement sans que le compilateur puisse le savoir... donc il ne l'enlève pas.
VB
adebaene
Olivier wrote:
Dans mon cas ce serait des fonctions completes et pas des parties de code dans une fonction.
Normalement, il peut supprimer les fonctions non référencées, vu que la seule façon d'accéder à une fonction, c'est : - de l'appeler directement. - de prendre son addresse dans un pointeur.
2 choses que le compilo/linker peut détecter.
Par contre, il ne le fait qu'en mode release et quand il ne s'agit pas d'une DLL ou d'une librairie (évidemment).
Arnaud MVP - VC
Olivier wrote:
Dans mon cas ce serait des fonctions completes et pas des parties de code
dans une
fonction.
Normalement, il peut supprimer les fonctions non référencées, vu que
la seule façon d'accéder à une fonction, c'est :
- de l'appeler directement.
- de prendre son addresse dans un pointeur.
2 choses que le compilo/linker peut détecter.
Par contre, il ne le fait qu'en mode release et quand il ne s'agit pas
d'une DLL ou d'une librairie (évidemment).
Dans mon cas ce serait des fonctions completes et pas des parties de code dans une fonction.
Normalement, il peut supprimer les fonctions non référencées, vu que la seule façon d'accéder à une fonction, c'est : - de l'appeler directement. - de prendre son addresse dans un pointeur.
2 choses que le compilo/linker peut détecter.
Par contre, il ne le fait qu'en mode release et quand il ne s'agit pas d'une DLL ou d'une librairie (évidemment).
Arnaud MVP - VC
Vincent Burel
wrote in message news:
Olivier wrote:
Dans mon cas ce serait des fonctions completes et pas des parties de code dans une fonction.
Normalement, il peut supprimer les fonctions non référencées, vu que la seule façon d'accéder à une fonction, c'est : - de l'appeler directement. - de prendre son addresse dans un pointeur.
manque d'imagination VB
<adebaene@club-internet.fr> wrote in message
news:1126697984.965782.306450@g44g2000cwa.googlegroups.com...
Olivier wrote:
Dans mon cas ce serait des fonctions completes et pas des parties de code
dans une
fonction.
Normalement, il peut supprimer les fonctions non référencées, vu que
la seule façon d'accéder à une fonction, c'est :
- de l'appeler directement.
- de prendre son addresse dans un pointeur.
Dans mon cas ce serait des fonctions completes et pas des parties de code dans une fonction.
Normalement, il peut supprimer les fonctions non référencées, vu que la seule façon d'accéder à une fonction, c'est : - de l'appeler directement. - de prendre son addresse dans un pointeur.
manque d'imagination VB
Arnold McDonald
wrote:
Normalement, il peut supprimer les fonctions non référencées, vu que la seule façon d'accéder à une fonction, c'est : - de l'appeler directement. - de prendre son addresse dans un pointeur.
Tu as des tas de manières de déguiser un appel de fonction. Et cela sert dans les méthodes de protections, les malwares, (qui, quoi qu'on en dise sont des logiciels comme les autres), etc. En obfusquant un peu ton code, tu peux pommer complètement le compilo pour ce qui est de l'estimation/évaluation/detection d'un appel de fonction.
Sans compter les tas de magouilles comme sauter à un bout de code (la fonction déguisée) et au beau milieu, construire un RET sur la pile et metre IP dessus. Etc, etc.
Bref, je préfère que le compilo laisse mon code tranquille plutôt que d'essayer de virer le code inutile. AMHA le code inutile doit être enlevé par le codeur lui-même lorsqu'il écrit son code :-). Quand aux librairies, les 9/10e utilisent des DLLs, donc, n'est chargé que ce qu'il faut au moment où il faut. Et encore, quand je dis chargé, c'est juste mappé.
-- Arnold McDonald (AMcD®)
http://arnold.mcdonald.free.fr/
adebaene@club-internet.fr wrote:
Normalement, il peut supprimer les fonctions non référencées, vu que
la seule façon d'accéder à une fonction, c'est :
- de l'appeler directement.
- de prendre son addresse dans un pointeur.
Tu as des tas de manières de déguiser un appel de fonction. Et cela sert
dans les méthodes de protections, les malwares, (qui, quoi qu'on en dise
sont des logiciels comme les autres), etc. En obfusquant un peu ton code, tu
peux pommer complètement le compilo pour ce qui est de
l'estimation/évaluation/detection d'un appel de fonction.
Sans compter les tas de magouilles comme sauter à un bout de code (la
fonction déguisée) et au beau milieu, construire un RET sur la pile et metre
IP dessus. Etc, etc.
Bref, je préfère que le compilo laisse mon code tranquille plutôt que
d'essayer de virer le code inutile. AMHA le code inutile doit être enlevé
par le codeur lui-même lorsqu'il écrit son code :-). Quand aux librairies,
les 9/10e utilisent des DLLs, donc, n'est chargé que ce qu'il faut au moment
où il faut. Et encore, quand je dis chargé, c'est juste mappé.
Normalement, il peut supprimer les fonctions non référencées, vu que la seule façon d'accéder à une fonction, c'est : - de l'appeler directement. - de prendre son addresse dans un pointeur.
Tu as des tas de manières de déguiser un appel de fonction. Et cela sert dans les méthodes de protections, les malwares, (qui, quoi qu'on en dise sont des logiciels comme les autres), etc. En obfusquant un peu ton code, tu peux pommer complètement le compilo pour ce qui est de l'estimation/évaluation/detection d'un appel de fonction.
Sans compter les tas de magouilles comme sauter à un bout de code (la fonction déguisée) et au beau milieu, construire un RET sur la pile et metre IP dessus. Etc, etc.
Bref, je préfère que le compilo laisse mon code tranquille plutôt que d'essayer de virer le code inutile. AMHA le code inutile doit être enlevé par le codeur lui-même lorsqu'il écrit son code :-). Quand aux librairies, les 9/10e utilisent des DLLs, donc, n'est chargé que ce qu'il faut au moment où il faut. Et encore, quand je dis chargé, c'est juste mappé.
-- Arnold McDonald (AMcD®)
http://arnold.mcdonald.free.fr/
Olivier
D'apres mes tests
Pour des fonctions C: ---------------------- L'unité de suppression du code mort du Linker est le fichier .obj et non pas la fonction, explication.
Soit une librairie MyLib contenant deux fichiers sources :
Source1.ccp contient : deux fonctions fct11() et fct12()
Source2.cpp contient : une fonction fct20()
Une application MyApp est lié statiquement à la librairie MyLib :
Si cette application appelle une des deux fonctions fct11 ou fct12 le code compile de source1.obj sera ajoute en totalite a l'application.
Pour des classes:
Cela depend des options d'optim aussi de la lib que de l'appli.
Vous confirmez ?
wrote in message news:
Olivier wrote:
Dans mon cas ce serait des fonctions completes et pas des parties de code dans une fonction.
Normalement, il peut supprimer les fonctions non référencées, vu que la seule façon d'accéder à une fonction, c'est : - de l'appeler directement. - de prendre son addresse dans un pointeur.
2 choses que le compilo/linker peut détecter.
Par contre, il ne le fait qu'en mode release et quand il ne s'agit pas d'une DLL ou d'une librairie (évidemment).
Arnaud MVP - VC
D'apres mes tests
Pour des fonctions C:
----------------------
L'unité de suppression du code mort du Linker est le fichier .obj et non pas
la fonction, explication.
Soit une librairie MyLib contenant deux fichiers sources :
Source1.ccp contient : deux fonctions fct11() et fct12()
Source2.cpp contient : une fonction fct20()
Une application MyApp est lié statiquement à la librairie MyLib :
Si cette application appelle une des deux fonctions fct11 ou fct12 le code
compile de source1.obj sera ajoute en totalite a l'application.
Pour des classes:
Cela depend des options d'optim aussi de la lib que de l'appli.
Vous confirmez ?
<adebaene@club-internet.fr> wrote in message
news:1126697984.965782.306450@g44g2000cwa.googlegroups.com...
Olivier wrote:
Dans mon cas ce serait des fonctions completes et pas des parties de code
dans une
fonction.
Normalement, il peut supprimer les fonctions non référencées, vu que
la seule façon d'accéder à une fonction, c'est :
- de l'appeler directement.
- de prendre son addresse dans un pointeur.
2 choses que le compilo/linker peut détecter.
Par contre, il ne le fait qu'en mode release et quand il ne s'agit pas
d'une DLL ou d'une librairie (évidemment).
Pour des fonctions C: ---------------------- L'unité de suppression du code mort du Linker est le fichier .obj et non pas la fonction, explication.
Soit une librairie MyLib contenant deux fichiers sources :
Source1.ccp contient : deux fonctions fct11() et fct12()
Source2.cpp contient : une fonction fct20()
Une application MyApp est lié statiquement à la librairie MyLib :
Si cette application appelle une des deux fonctions fct11 ou fct12 le code compile de source1.obj sera ajoute en totalite a l'application.
Pour des classes:
Cela depend des options d'optim aussi de la lib que de l'appli.
Vous confirmez ?
wrote in message news:
Olivier wrote:
Dans mon cas ce serait des fonctions completes et pas des parties de code dans une fonction.
Normalement, il peut supprimer les fonctions non référencées, vu que la seule façon d'accéder à une fonction, c'est : - de l'appeler directement. - de prendre son addresse dans un pointeur.
2 choses que le compilo/linker peut détecter.
Par contre, il ne le fait qu'en mode release et quand il ne s'agit pas d'une DLL ou d'une librairie (évidemment).
Arnaud MVP - VC
Aurelien Regat-Barrel
> Bonjour,
Bonjour,
Le linker (VC6 entreprise ou VS2003 architecte) n'est il pas censé supprimer le code mort dors du link Final ? Si je regarde dans l'exe générer je retrouve des chaines de caractères ou des valeurs (int ou int64) initialisées dans des fonctions qui ne sont pas appelées, non ? problème d'option de compile/ de link ?
Il me semble plutôt qu'il est censé n'importer que le minimum depuis une lib ("smart linker"), ce qui n'est pas la même chose. Une idée : transforme ton code en lib statique, et lie-le à un exe presque vide...
-- Aurélien Regat-Barrel
> Bonjour,
Bonjour,
Le linker (VC6 entreprise ou VS2003 architecte) n'est il pas
censé supprimer le code mort dors du link Final ?
Si je regarde dans l'exe générer je retrouve des chaines de caractères
ou des valeurs (int ou int64) initialisées dans des fonctions qui ne sont
pas appelées, non ? problème d'option de compile/ de link ?
Il me semble plutôt qu'il est censé n'importer que le minimum depuis une
lib ("smart linker"), ce qui n'est pas la même chose.
Une idée : transforme ton code en lib statique, et lie-le à un exe
presque vide...
Le linker (VC6 entreprise ou VS2003 architecte) n'est il pas censé supprimer le code mort dors du link Final ? Si je regarde dans l'exe générer je retrouve des chaines de caractères ou des valeurs (int ou int64) initialisées dans des fonctions qui ne sont pas appelées, non ? problème d'option de compile/ de link ?
Il me semble plutôt qu'il est censé n'importer que le minimum depuis une lib ("smart linker"), ce qui n'est pas la même chose. Une idée : transforme ton code en lib statique, et lie-le à un exe presque vide...
-- Aurélien Regat-Barrel
Gilles Vollant \(MVP\)
Je ne partage pas cette conclusion. Pas en utilisant le WPO, qui donne les meilleurs resultats d'optimisation avec Visual C++ de Visual Studio 2002 et suivant. Avec le WPO, c'est un peu comme si tout le code était d'un bloc.
Avec le WPO, toute fonction et toute partie de code dont le compilateur peut détecter qu'il est rigoureusement impossible qu'il soit appeler sera éliminé.
a propos du WPO http://gilles-vollant.developpez.com/visual-cpp/optimisation/
Je ne partage pas cette conclusion.
Pas en utilisant le WPO, qui donne les meilleurs resultats d'optimisation
avec Visual C++ de Visual Studio 2002 et suivant. Avec le WPO, c'est un peu
comme si tout le code était d'un bloc.
Avec le WPO, toute fonction et toute partie de code dont le compilateur peut
détecter qu'il est rigoureusement impossible qu'il soit appeler sera
éliminé.
a propos du WPO
http://gilles-vollant.developpez.com/visual-cpp/optimisation/
Je ne partage pas cette conclusion. Pas en utilisant le WPO, qui donne les meilleurs resultats d'optimisation avec Visual C++ de Visual Studio 2002 et suivant. Avec le WPO, c'est un peu comme si tout le code était d'un bloc.
Avec le WPO, toute fonction et toute partie de code dont le compilateur peut détecter qu'il est rigoureusement impossible qu'il soit appeler sera éliminé.
a propos du WPO http://gilles-vollant.developpez.com/visual-cpp/optimisation/