Bonjour,
Si j'ai une classe A avec une méthode non static dedans, est-ce que le code est dupliqué en mémoire à chaque instanciation de A? Dans le cas static j'imagine qu'il n'est pas dupliqué.
Merci.
Bonjour,
Si j'ai une classe A avec une méthode non static dedans, est-ce que le code est dupliqué en mémoire à chaque instanciation de A? Dans le cas static j'imagine qu'il n'est pas dupliqué.
Merci.
Si je dit pas de bétise ,le seul code dupliqué en mémoire entre les objets d'une même classe est les données membres non statique.
Pour chaque classe il n'existe qu'une seule fonction qui est appélée par une instance d'une classe grâce à l'opérateur . ou -> .
La qualificatif static permet de rendre une donnée/fonction membre globale à une classe, indépendante d'un quelconque objet.
Tu imagine l'utilsation mémoire si chaque fonction était dupliqué ?
Il faudrait un To de ram pour nimporte quel jeu !!
"Never use brute force in fighting an exponential." (Andrei Alexandrescu)
Mes articles dont Conseils divers sur le C++
Une très bonne doc sur le C++ (en) Why linux is better (fr)
Le code n'est pas dupliqué, la fonction est toujours la même, au paramètre this près.
Par contre, le code est dupliqué quand la fonction est inline bien sûr.
Merci pour vos réponses, c'est bien ce que je pensais.
Salut,
Normalement, non...
Lors de la création des fichiers objet (les fameux *.o/*.obj/similaires créés lors de la compilation, avant l'édition de liens), chaque fonction est transformée en instructions processeur une seule fois (sauf pour ce qui est des fonctions inlinées).
Lors de l'édition de liens, les fichiers objet sont "concaténés", ce qui permet de détermier l'adresse à laquelle commencent chacune des fonctions.
Les différentes optimisations vont surtout avoir une incidence sur les différentes instructions utilisées par chacune des fonction, et donc sur la taille que chacune d'elle prend en mémoire, et par conséquent, sur l'adresse à laquelle chacune des fonctions commence
Mais, à part la taille finale de l'exécutable, et les fonctions effectivement inlinées, les différentes optimisations ne changeront rien![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Partager