Tu as des mésures ? J'en ai pas avec C++, mais dans la passé, avec un
compilateur C, sans optimisation, la tokenisation représentait environ
40% du temps CPU total. Sans parler du fait que faire avec deux
processus séparés, ça veut dire passer les données par le disque, avec
des lectures et des écritures en plus.
Tu as des mésures ? J'en ai pas avec C++, mais dans la passé, avec un
compilateur C, sans optimisation, la tokenisation représentait environ
40% du temps CPU total. Sans parler du fait que faire avec deux
processus séparés, ça veut dire passer les données par le disque, avec
des lectures et des écritures en plus.
Tu as des mésures ? J'en ai pas avec C++, mais dans la passé, avec un
compilateur C, sans optimisation, la tokenisation représentait environ
40% du temps CPU total. Sans parler du fait que faire avec deux
processus séparés, ça veut dire passer les données par le disque, avec
des lectures et des écritures en plus.
|> Je n'apprécie en particulier pas qu'un même fichier objet inclus
|> directement ou par l'intermédiaire d'une bibliothèque puisse
|> produire des exécutables aux comportements différents.
Est-ce que tu en as un exemple où c'est le cas ?
|> Je n'apprécie en particulier pas qu'un même fichier objet inclus
|> directement ou par l'intermédiaire d'une bibliothèque puisse
|> produire des exécutables aux comportements différents.
Est-ce que tu en as un exemple où c'est le cas ?
|> Je n'apprécie en particulier pas qu'un même fichier objet inclus
|> directement ou par l'intermédiaire d'une bibliothèque puisse
|> produire des exécutables aux comportements différents.
Est-ce que tu en as un exemple où c'est le cas ?
Et les utilisations de macros?
Tu oublie les substitutions dues aux #define,
Faire un pré-processsing séparé veut dire que [...]
#define a b
int main() {
int a = 42;
}
Et les utilisations de macros?
Tu oublie les substitutions dues aux #define,
Faire un pré-processsing séparé veut dire que [...]
#define a b
int main() {
int a = 42;
}
Et les utilisations de macros?
Tu oublie les substitutions dues aux #define,
Faire un pré-processsing séparé veut dire que [...]
#define a b
int main() {
int a = 42;
}
Tu as oublié de préciser la version de GCC en question.
Tu as oublié de préciser la version de GCC en question.
Tu as oublié de préciser la version de GCC en question.
A moins que ce soit ma lecture du standardese qui soit déficiente,
"Library components are linked to satisfy external references to
functions and objects not defined in the current translation." me
semble un peu vague.
A moins que ce soit ma lecture du standardese qui soit déficiente,
"Library components are linked to satisfy external references to
functions and objects not defined in the current translation." me
semble un peu vague.
A moins que ce soit ma lecture du standardese qui soit déficiente,
"Library components are linked to satisfy external references to
functions and objects not defined in the current translation." me
semble un peu vague.
James Kanze writes:Tu as des mésures ? J'en ai pas avec C++, mais dans la passé, avec
un compilateur C, sans optimisation, la tokenisation représentait
environ 40% du temps CPU total. Sans parler du fait que faire avec
deux processus séparés, ça veut dire passer les données par le
disque, avec des lectures et des écritures en plus.
Mini benchmark avec gcc sur un "hello, world" (donc, en gros, on
compile stdio.h ...)
0,01 sec pour le préprocesseur
0,03 sec pour la compilation (-> assembleur)
0,10 sec pour la compilation + assemblage (-> fichier objet).
0,60 sec pour la compilation complete (-> executable).
Dans ce ca là en tous cas, le préprocesseur est bien négligeable
devant le reste de la compil. Mais je ne sais pas à quel point c'est
représentatif ...
James Kanze <kanze@gabi-soft.fr> writes:
Tu as des mésures ? J'en ai pas avec C++, mais dans la passé, avec
un compilateur C, sans optimisation, la tokenisation représentait
environ 40% du temps CPU total. Sans parler du fait que faire avec
deux processus séparés, ça veut dire passer les données par le
disque, avec des lectures et des écritures en plus.
Mini benchmark avec gcc sur un "hello, world" (donc, en gros, on
compile stdio.h ...)
0,01 sec pour le préprocesseur
0,03 sec pour la compilation (-> assembleur)
0,10 sec pour la compilation + assemblage (-> fichier objet).
0,60 sec pour la compilation complete (-> executable).
Dans ce ca là en tous cas, le préprocesseur est bien négligeable
devant le reste de la compil. Mais je ne sais pas à quel point c'est
représentatif ...
James Kanze writes:Tu as des mésures ? J'en ai pas avec C++, mais dans la passé, avec
un compilateur C, sans optimisation, la tokenisation représentait
environ 40% du temps CPU total. Sans parler du fait que faire avec
deux processus séparés, ça veut dire passer les données par le
disque, avec des lectures et des écritures en plus.
Mini benchmark avec gcc sur un "hello, world" (donc, en gros, on
compile stdio.h ...)
0,01 sec pour le préprocesseur
0,03 sec pour la compilation (-> assembleur)
0,10 sec pour la compilation + assemblage (-> fichier objet).
0,60 sec pour la compilation complete (-> executable).
Dans ce ca là en tous cas, le préprocesseur est bien négligeable
devant le reste de la compil. Mais je ne sais pas à quel point c'est
représentatif ...
James Kanze wrote:|> Je n'apprécie en particulier pas qu'un même fichier objet inclus
|> directement ou par l'intermédiaire d'une bibliothèque puisse
|> produire des exécutables aux comportements différents.
Est-ce que tu en as un exemple où c'est le cas ?
Du code comme suit :
// Factory.h
typedef Object* (*creationFunction)();
class RegisterInFactory
{
RegisterInFactory(string s, creationFunction f)
{
Factory::instance.register(s, f)
}
};
// MyObject.cpp
Object *createMyObject()
{
return new MyObject;
}
RegisterInFactory dummy("MyObject", &createMyObject);
// On n'utilise dummy nulle part...
Avec Visual C++ 6, la variable globale dummy existe bien quand on lie
l'objet directement, mais pas quand MyObject est dans une
bibliothèque.
Donc ma factory ne contient pas les mêmes objets. Il existe néanmoins
une option de compilation qui permet de dire au lieur d'include cette
instance, mais il faut pour ça connaître son nom décoré, ce qui est un
peu lourd à mon sens.
James Kanze wrote:
|> Je n'apprécie en particulier pas qu'un même fichier objet inclus
|> directement ou par l'intermédiaire d'une bibliothèque puisse
|> produire des exécutables aux comportements différents.
Est-ce que tu en as un exemple où c'est le cas ?
Du code comme suit :
// Factory.h
typedef Object* (*creationFunction)();
class RegisterInFactory
{
RegisterInFactory(string s, creationFunction f)
{
Factory::instance.register(s, f)
}
};
// MyObject.cpp
Object *createMyObject()
{
return new MyObject;
}
RegisterInFactory dummy("MyObject", &createMyObject);
// On n'utilise dummy nulle part...
Avec Visual C++ 6, la variable globale dummy existe bien quand on lie
l'objet directement, mais pas quand MyObject est dans une
bibliothèque.
Donc ma factory ne contient pas les mêmes objets. Il existe néanmoins
une option de compilation qui permet de dire au lieur d'include cette
instance, mais il faut pour ça connaître son nom décoré, ce qui est un
peu lourd à mon sens.
James Kanze wrote:|> Je n'apprécie en particulier pas qu'un même fichier objet inclus
|> directement ou par l'intermédiaire d'une bibliothèque puisse
|> produire des exécutables aux comportements différents.
Est-ce que tu en as un exemple où c'est le cas ?
Du code comme suit :
// Factory.h
typedef Object* (*creationFunction)();
class RegisterInFactory
{
RegisterInFactory(string s, creationFunction f)
{
Factory::instance.register(s, f)
}
};
// MyObject.cpp
Object *createMyObject()
{
return new MyObject;
}
RegisterInFactory dummy("MyObject", &createMyObject);
// On n'utilise dummy nulle part...
Avec Visual C++ 6, la variable globale dummy existe bien quand on lie
l'objet directement, mais pas quand MyObject est dans une
bibliothèque.
Donc ma factory ne contient pas les mêmes objets. Il existe néanmoins
une option de compilation qui permet de dire au lieur d'include cette
instance, mais il faut pour ça connaître son nom décoré, ce qui est un
peu lourd à mon sens.