Bonjour à tous,
j'ai été confronté récemment à la problématique de l'impact que peut avoir l'allocation dynamique de mémoire sur les performances d'un programme.
Je ne veux pas faire mon vieux croûton, mais à l'époque où l'on m'a enseigné le C/C++ (entre 96 et 99), on m'a clairement expliqué que l'allocation, c'est pas gratuit, et qu'il faut éviter d'en faire à la volée surtout s'il s'agit de données de taille considérable, comme des images par exemple. J'ai donc pris l'habitude de pré-allouer autant que possible la mémoire que je sais nécessaire, et de travailler ensuite principalement par pointeurs.
Aujourd'hui un de mes collaborateurs m'a montré son code de lecture vidéo utilisant principalement des références, de sorte qu'à chaque nouvelle image, il alloue un nouvel objet (donc environ 640x480x4 octets) qui sera détruit une fois l'image traitée, puis réalloué à l'image suivante etc.
Evidemment j'ai tout de suite tiqué, mais il m'a soutenu que le surcoût d'une allocation était négligeable, et à vrai dire quelques tests rapides et naifs du genre "boucle infinie" n'ont pas démenti la chose. Donc même si je ne trouve pas "élégant" de jouer ainsi avec la mémoire, pourquoi pas, mais ça va quand même à l'encontre de tout ce que je croyais.
Je me pose donc des questions :
est-ce que j'ai mal appris mes cours ?
ou bien le progrès du matériel ou des compilateurs a fait disparaître ce qui était une contrainte à l'époque ?
ou bien il y a une faille dans les tests et il y a bien un inconvénient à abuser des new/delete ? (après tout un "hello world" en boucle infinie, ce n'est pas la même chose qu'un vrai programme qui brasse de la donnée...)
Si des personnes versées en gestion bas niveau de la mémoire pouvaient m'éclairer sur le sujet, j'en serais bien reconnaissant.
Merci d'avance.