Bonjour.
Je bosse actuellement sur code C++ où j'essaye d'optimiser au mieux la consommation mémoire (c'est pour faire de l'astrophysique sur supercalculateurs). Donc comme souvent j'essaye de trouver le bon équilibre entre faire un code "lisible" pas trop horrible à utiliser, et optimiser partout où je peux (c'est tellement critique qu'il m'arrive de compacter plusieurs données qui tiennent sur quelques bits dans des "unsigned char"). Donc pour ne pas faire n'importe quoi, je voudrais être sûr de bien comprendre l'overhead de mémoire liée à l'héritage et aux membres virtuels.
Je précise que ce qui m'intéresse c'est l'overhead par objet, l'overhead "static" par classe n'étant pas un problème pour moi.
1) Est-ce que MaClasseB : public MaClasseA va ajouter un overhead mémoire si MaClasseA et MaClasseB ne comportent aucune méthode virtuelle ? (par exemple si MaClasseB se contente d'ajouter quelques fonctions à MaClasseA)
2) Maintenant supposons que MaClasseA comporte n méthodes virtuelles : cela change-t-il quelque chose qu'elles soient pures ou non du point de vue de l'overhead mémoire (je ne pense que non, mais j'aimerai en être sûr) ?
3) Toujours dans le cas où MaClasseA comporte n méthodes virtuelles : quel va être l'overhead pour chaque objet de type MaClasseB ? Un seul pointeur pour chaque objet indépendamment de n ? (+ un overhead static proportionnel à n dont je me fous un peu).
4) Maintenant plus sioux, MaClasseC : public MaClasseA, public MaClasseB avec MaClasseA comportant nA méthodes virtuelles et MaClasseB comportant nB méthodes virtuelles. Quel est l'overhead pour chaque objet de type MaClasseC ?
5) Et une dernière : MaClasseB : public MaClasseA et MaClasseC : public MaClasseB avec nA méthodes virtuelles dans A qui sont implémentées dans B ET dans C (donc celles qui sont appelées pour C "écrasent" celles de B) + nB méthodes virtuelles supplémentaires déclarées dans B qui sont implémentées dans C. Quel overhead pour chaque objet de type MaClasseC ?
Merci infiniment à ceux qui m'aideront à y voir plus clair
Partager