Bonjour!
J'ai une question qui concerne plus ou moins de l'optimization, mais aussi la façon dont un compilo gère les namespaces et plus précisément les variables globales "enfermées" dans des namespaces.
Dans le document suivant consacré à l'optimization en C++, on peut lire à la page 24 :
Source : http://www.agner.org/optimize/ le premier PDF.The advantage of static data is that they can be initialized to desired values before the
program starts. The disadvantage is that the memory space is occupied throughout the
whole program execution, even if the variable is only used in a small part of the program.
This makes data caching less efficient.
Do not make variables global if you can avoid it. Global variables may be needed for
communication between different threads, but that’s about the only situation where they are
unavoidable. It may be useful to make a variable global if it is accessed by several different
functions and you want to avoid the overhead of transferring the variable as function
parameter. But it may be a better solution to make the functions that access the saved
variable members of the same class and store the shared variable inside the class. Which
solution you prefer is a matter of programming style.
Vu le conseil donné ici de complètement éviter les variables globales (non constantes), je me demandais si le fait de les encapsuler dans des espaces de nom n'aidait pas à indiquer au compilo de ne pas charger en permanence les dites variables (a ce que j'ai compris). Ou bien les espaces de noms sont-ils uniquement gérés comme des extension des noms des variables?
Je me demandais ça parceque la configuration (provenant d'un .ini) de mon application est actuellement reflétée par des variables globales (les seules de l'application si on omet les membres statiques de classes) qui peuvent potentiellement être modifées par pas mal de code différent, donc ça me semblait plus naturel de simplement les encapsuler dans un namespace plutot que de faire une classe avec uniquement des membres statiques (vu que je ne veux pas d'instanciation). (note : ce ne sont que des types de bases ou des std::string)
Je me demande aussi si ça vaut vraiment le coup de se poser la question : est-ce que ça peut vraiment plomber des perfs globales a cause de l'impact sur la stack ou est-ce que c'est tellement mineur que je peux oublier jusqu'à ce que ça pose de manière évidente un problème de perf?
Partager