Consultez le code suivant:Frais généraux de construction de classe de base vides?
#include <iostream>
#include <type_traits>
class Base
{
public: static int f() {return 42;}
};
class Derived : public Base
{
protected: int x;
};
class NotDerived
{
protected: int x;
};
int main()
{
std::cout<<sizeof(Base)<<std::endl;
std::cout<<sizeof(Derived)<<std::endl;
std::cout<<sizeof(NotDerived)<<std::endl;
return 0;
}
Avec g ++ 4.7 -O3, il imprime:
1
4
4
et si je comprends bien que, cela signifie que l'optimisation vide de classe de base est activée.
Mais ma question concerne les frais généraux d'exécution: la création est-il en tête (et destructing) un objet Derived
par rapport à un objet NotDerived
en raison du fait que Derived
devrait construire/détruire l'objet Base
correspondant?
Je le pense, mais je ne pense pas que vous devriez vous inquiéter à ce sujet. Vous devriez simplement utiliser n'importe quel outil approprié pour votre travail. Traiter toute optimisation pendant la phase de profilage. – RonaldBarzell
Ceci est un aspect critique pour mon code. Utiliser une classe de base vide m'aiderait beaucoup en termes de design, mais comme je travaille dans le High Performance Computing et que des milliards d'objets de ce genre seront créés pendant l'exécution, je devrais m'y intéresser ... – Vincent
, mais la question pour moi est de savoir si vous devriez vous en préoccuper si tôt? Puisque vous avez les chiffres, avez-vous fait des projections pour voir où vous seriez? Il semble que si vous vous inquiétez au début, la meilleure chose à faire est de trouver des nombres durs pour les hits maximum acceptables, puis de les comparer avec votre compilateur, en gardant à l'esprit qu'un compilateur différent pourrait produire des résultats différents. .. – RonaldBarzell