C++ et les jeux

Ayant noté une remarque de tuo dans ce thread, à propos de l’usage du C++ dans le developpement de jeux sur consoles, je m’interrogeais sur l’usage de méthodes C++. Dans vos développement C++, utilisez-vous la STL, la bibliothèque standard C++ et si oui, quels sont typiquement les templates ou classes les plus utilisées ? vector, string, map, complex, … mappez-vous une allocation mémoire personnalisée (dans un gros buffer alloué au début, par exemple) pour s’afffranchir des alloc/free faisant appellent au sytème pour gagner en rapidité ?

Ce message a été édité par Moktar le 31/10/2003

bump. Personne pour alimenter ce thread ?

Ce message a été édité par Moktar le 03/11/2003

Oups je l’avais même pas vu ce thread désolé

Bon, pour répondre à ta question, le C++ est effectivement utilisé assez souvent dans les jeux, y compris les jeux console (sisi c0unt0, les jeux en C se font de plus en plus rare ! ). Après, pour les STL, y’a les pour et y’a les contre.

Personnellement je m’en tape J’utilise les STL de manière très “superficielle”, c’est à dire que je me limite à des templates utilitaire genre les vector et les string (et encore, généralement les string ont tendance à dégager au final). Pourquoi ? Parce que le reste je n’en ai pas l’utilité, et que j’ai d’autres contraintes encore à respecter qui font que les autres templates ne me servent pas. Cela dit, je connais des gens qui mettent des STL de partout (nononon pas de nom), même sur console, et après la gestion mémoire devient un enfer M’enfin bon, chacun son choix hein.

Personnellement, je suis un farouche partisant de l’utilisation “intelligente” du C++ et des STL : n’utiliser que les fonctionnalités majeures (héritage de classes, opérateurs, …) et surtout ne pas utiliser les fonctionnalités “avancées” (exceptions, héritage multiple, …) En effet, beaucoup de développeurs maitrisent mal ces fonctionnalités avancées (et moi même je n’en suis pas un spécialiste d’ailleurs), et je préfére donc qu’on se limite à peu de fonctionnalités bien maitrisées, plutôt que d’utiliser tout le panel des fonctionnalités, y compris celles qu’on ne maitrise pas.

Au final, quand je vois mon code C++, je peux quasiment dire avec 100% d’exactitude ce que le compilateur va me générer comme code. Tant que je peux le faire, tout va bien. A partir du moment où le code C++ devient trop abscon pour que je puisse savoir ce qu’il fait exactement, je considére qu’on pousse trop loin. Mais c’est un avis personnel d’un féru d’optimisation

Pour la gestion mémoire, chez nous on la gére “a la mano” en effet, c’est à dire que j’ai écris un gestionnaire mémoire qui s’occupe de toutes les allocations mémoire (malloc / free / new / delete / …). Et qui remplace totalement celles fournies par défaut. Sauf qu’on ne le fait que sur console (sur PC on s’en branle quand même hein, c’est d’ailleurs pour ça entre autre que les jeux PC sont souvent plus gourmands en mémoire). L’un des interêts principal est d’homogénéiser l’allocation mémoire sur toutes les plateformes “embarquées” (cad consoles de jeux). Parce qu’en fonction de la stratégie d’allocation mémoire adoptée, la fragmentation mémoire et donc l’utilisation effective de la mémoire va différer. Donc on préfére avoir une seule stratégie connue, qui soit “tweakable” pour chaque plateforme. Et accessoirement, mon allocateur est aussi plus rapide que celui par défaut sur PS2 (mais c’est pas dur).

voili voila. Pitain ça me manque un peu le dév sur PS2 la quand meme

Je suis assez d’accord avec un usage modéré de la STL, vu les contraintes de lisiblité (notamment en debugging) et de perf.
Serait-il envisageable que tu nous fasses part de ta bibliothèque de gestion mémoire ou bien est-ce totalement rédhibitoire ?
Pourquoi je demande ça ? en fait, je ferais bien un essai d’usage d’une bibliothèque de gestion mémoire (C, C++) sur une grosse appli afin de mesurer le niveau de performances perdus dans les appels systèmes.

Merci par avance.

Humpf, tout dépends ce que tu entends par « nous faire part de ta bibliothéque de gestion mémoire ». Si tu veux dire « la mettre en open source », la réponse est non, il s’agit de code qui appartient à la boite, je n’ai aucun droit a titre personnel dessus. Donc je ne leakerai pas de code

Si tu entends plutôt « expliquer comment ça marche », ça je peux faire, mais ça a moins d’interêt pratique tout de suite

De toute façon, je songe écrire ma propre lib de gestion mémoire, avec fonctionnalités avancées & co qui vont bien, donc peut être que ce jour la je la mettrai en open source ou peut etre pas :wink:

huhu non, pas expliquer comment ça marche, ça j’en ai une idée assez précise mais plutôt ne pas me retaper le dev. de cette partie, surtout que c’est pour faire un essai, juste un essai. Moi aussi j’ai souvent utilisé une gestion mémoire “à la mano” mais assez spécialisée à chaque usage, genre on utilise des buffers de data et des buffers de controls donc j’ai un POOL de blocs mémoire de data et un autre de control, tous prédimenssionnés.

Tant piiiis.