IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

Utilisation des pointeurs pour le développement des jeux vidéo


Sujet :

C++/CLI

  1. #1
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Juin 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2021
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Utilisation des pointeurs pour le développement des jeux vidéo
    Bonjour,

    J"apprends en ce moment le c++, j'aimerais savoir l'utilité des pointeurs dans le cadre des jeux vidéo. Si j'ai bien compris les pointeurs permettent d'économiser de la mémoire, donc les pointeurs permettrais d'optimiser le code pour avoir un rendu plus fluide ? J'ai déjà appris le C mais je n'ai pas compris la différence entre pointeur brute et intelligent.

    Pouvez-vous m'éclairer ?

    Cordialement

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 108
    Points
    43 108
    Par défaut
    Un pointeur ne permet pas d'économiser la mémoire, c''est une variable qui contient une adresse mémoire qui est en général typé. C'est même le contraire, il occupe la taille d'une adresse mémoire qui correspond à une variable int, char, float, etc. occupant elle même sa mémoire. On est quelque fois obligé d'utiliser des pointeurs ( le plus courant étant l'utilisation des fonctions de chaines de caractères). Mal utilisé, ceux-ci provoquant des fuites mémoires (pointeurs plus utilisés désalloués), des crashs du au fait d'une non affection de valeur d'un pointeur (un pointeur créée non mis à null va pointer sur une valeur aléatoire, le contenu des cases mémoires lui ayant été allouées, ou la valeur null le pointeur ne pointant alors sur la case mémoire 0 du processus).

    En c++, les allocations mémoires se font normalement par les constructeurs et les désallocations par les destructeurs. Les pointeurs intelligents simulent le fonctionnement des pointeurs en c avec une meilleure gestion mémoire qu'en C.

    Dans le cadre d'un jeu, pour avoir un rendu plus fluide, il faut à mon avis au contraire utiliser au maximum la mémoire pour précalculer quand c'est possible, et c'est surtout les algorithmes qui vont compter.

    Je ne suis pas développeur, mes collègues DVP complémenteront ma réponse.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    les pointeurs permettent d'économiser de la mémoire, donc les pointeurs permettrais d'optimiser le code pour avoir un rendu plus fluide ? J'ai déjà appris le C mais je n'ai pas compris la différence entre pointeur brute et intelligent.
    C'est comme dire qu'un marteau permet de construire une navette spatiale.
    C'est pas faux, mais c'est pas très pertinent.

    Je suis d'accord avec le message de @chrtophe.

    Et pour poursuivre l'analogie "la différence entre pointeur brute et intelligent", c'est comme comparer une pierre et un marteau de charpentier.
    On peut faire les mêmes choses avec mais pas avec la même simplicité et sécurité.

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 685
    Points
    685
    Par défaut
    L'idée que les pointeurs permettent d'économiser de la mémoire vient du fait que l'alternative qui est présentée est d'avoir des variables "classiques" sur toute la durée de vie du programme. Par exemple, si on fait un jeu qui peut avoir des centaines de monstres en même temps, on va créer un tableau avec 100 monstres et par exemple un boolean quand un monstre n'existe pas. L'allocation dynamique est alors présentée comme un moyen d'allouer la mémoire que quand un monstre existe, plutôt qu'avoir la mémoire réservée en permanence.

    C'est une approche pédagogiquement discutable, mais qui est classique.

  5. #5
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Juin 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2021
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par mintho carmo Voir le message
    L'idée que les pointeurs permettent d'économiser de la mémoire vient du fait que l'alternative qui est présentée est d'avoir des variables "classiques" sur toute la durée de vie du programme. Par exemple, si on fait un jeu qui peut avoir des centaines de monstres en même temps, on va créer un tableau avec 100 monstres et par exemple un boolean quand un monstre n'existe pas. L'allocation dynamique est alors présentée comme un moyen d'allouer la mémoire que quand un monstre existe, plutôt qu'avoir la mémoire réservée en permanence.

    C'est une approche pédagogiquement discutable, mais qui est classique.
    Donc si j'ai bien compris les pointeurs permettent d'allouer/libérer la mémoire de manière dynamique selon si l'objet en question est présent ou pas. C'est bien ça ? Plus haut, chrtophe dit que les pointeurs occupent plus de place que les variables classique donc leurs utilisations ne serait pas pertinente ? Aussi, je ne vois pas dans quel cas utiliser les pointeurs. J'ai lu plusieurs forum et j'ai l'impression que personne est vraiment capable d'expliquer leurs utilité dans un cas concret. Dois-je en déduire que les pointeurs sont utile que très rarement ?

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 393
    Points : 685
    Points
    685
    Par défaut
    Les pointeurs occupent plus de place, parce qu'ils occupent la taille du pointeur en lui même et la taille de l'objet pointé. Alors que si l'objet est créé sans pointeur, il n'y a que la taille de l'objet.

    En général, c'est pas critique. Mais ça peut le devenir dans certaines situations. Mais tu débutes en C++, donc tu ne seras pas dans ces situations.

    Comme tu l'as compris, l'utilité d'un pointeur, c'est d'avoir un objet dynamique, c'est à dire que tu peux créer quand tu veux et détruire quand tu veux. Donc tu l'utilise quand tu es dans cette situation. Ils sont souvent utile quand la situation est adaptée. Je vois pas comment être plus concret qu'en disant que c'est utile dans les situations où tu veux créer et détruire un objet a n'importe quel moment (remplace "objet" parce que tu veux : monstre dans un jeu, fenêtre dans une application, une ligne ou un caractère dans du texte, etc)

  7. #7
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Juin 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2021
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par mintho carmo Voir le message
    Les pointeurs occupent plus de place, parce qu'ils occupent la taille du pointeur en lui même et la taille de l'objet pointé. Alors que si l'objet est créé sans pointeur, il n'y a que la taille de l'objet.

    En général, c'est pas critique. Mais ça peut le devenir dans certaines situations. Mais tu débutes en C++, donc tu ne seras pas dans ces situations.

    Comme tu l'as compris, l'utilité d'un pointeur, c'est d'avoir un objet dynamique, c'est à dire que tu peux créer quand tu veux et détruire quand tu veux. Donc tu l'utilise quand tu es dans cette situation. Ils sont souvent utile quand la situation est adaptée. Je vois pas comment être plus concret qu'en disant que c'est utile dans les situations où tu veux créer et détruire un objet a n'importe quel moment (remplace "objet" parce que tu veux : monstre dans un jeu, fenêtre dans une application, une ligne ou un caractère dans du texte, etc)
    Merci beaucoup !

  8. #8
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Juin 2021
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2021
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup ! Vos réponses m'ont grandement aidé;

  9. #9
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 108
    Points
    43 108
    Par défaut
    Plus haut, chrtophe dit que les pointeurs occupent plus de place que les variables classique donc leurs utilisations ne serait pas pertinente ?
    ça a été répondu. Ce n'est pas parce que ça occupe plus de place que ce n'est pas pertinent. exemple : Tu ouvres un fichier, tu lis un caractère puis tu le fermes, ceci dans une boucle. A ton avis qu'est ce qui est le plus pertinent


    Aussi, je ne vois pas dans quel cas utiliser les pointeurs. J'ai lu plusieurs forum et j'ai l'impression que personne est vraiment capable d'expliquer leurs utilité dans un cas concret. Dois-je en déduire que les pointeurs sont utile que très rarement ?
    Voici un exemple :

    En C, il n'y a pas de type chaine. Pour générer une chaine, on utilise un tableau de char que l'on doit terminer par un caractère 0 ('\0'). toutes les fonctions de manipulation de chaine attendant ce format et un pointeur sur ce tableau de char en paramètre. Pour utiliser une chaine, tu ne vas pas déclarer un tableau de char, pourquoi ? car si tu créé un tableau de char, il aura une taille fixe, ce qui est en général problématique pour le traitement de chaines. Tu dois par ailleurs allouer la mémoire pour ce tableau de char avant utilisation (sinon segfault ou pire comportement inattendu) et libérer celle-ci quand tu n'en a pas besoin (sinon fuite mémoire). Tu peux tout à fait accéder au contenu du tableau de char avec l'index des caractères ex: chaine[1] ou chaine[2] pour respectivement le second et troisième caractère, l'index 0 correspondant au 1er caractère de la chaine sur lequel pointe le pointeur te permettant d'accéder à cette chaine. Tu ne peux connaitre la longueur de la chaine qu'en utilisant la fonction strlen qui va parcourir tous les caractères de la chaine jusqu'à trouver \0 et soustraire l'adresse de ce \0 de l’adresse du pointeur de début de chaine. D’où l'importance de \0.

    Autre problématique : si tu utilises la fonction strcpy, elle ne va pas s'assurer que la chaine de destination a la taille suffisante pour lui copier le contenu en paramètre, pourquoi ? car en C le programmeur sait ce qu'il fait (même si ce n'est pas le cas, que ce soit par inexpérience ou oubli, c'est le postulat du C). c'est partiellement contournable avec strncpy qui permet de fournir une valeur maximale à ne pas dépasser lors de la copie, taille que tu dois avoir récupéré préalablement avec srlen.

    En C++, tu as un type string, ta chaine est un objet. Tu n'as plus à te préoccuper de tout ça, tu as juste à la déclarer et l'utiliser plus simplement sans devoir te préoccuper si la mémoire nécessaire est allouée, c'est le C++ qui gère. Pour part exemple concaténer 2 chaines, tu as juste à faire chaine2=chaine1+chaine2;

    Les pointeurs intelligents répondent à une problématique que je ne maitrise pas mais qui va simuler le comportement des pointeurs du C tout en te déchargeant de la gestion de la mémoire. Mais ça sera la même chose qu'en C, adapté à une situation précise (situation précise ne veut pas dire situation exceptionnelle).

    Vu que je ne développe pas, je suis intéressé pour plus de détails sur ces pointeurs intelligents. J'ai des notions de POO (mais que des notions).
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Les pointeurs intelligents répondent à une problématique que je ne maitrise pas mais qui va simuler le comportement des pointeurs du C tout en te déchargeant de la gestion de la mémoire. Mais ça sera la même chose qu'en C, adapté à une situation précise (situation précise ne veut pas dire situation exceptionnelle).
    Pour les "smart pointers" non cela ne simule pas mais tu encapsules 1 "raw pointer" [dans 1 objet] afin de profiter des constructeurs/ destructeurs pour la création et la libération.
    Après cela va + loin et on touche à
    • l'appartenance du pointeur. 1 ou plusieurs objets peuvent avoir 1 pointeur sur le même objet. Et dans ce cas, l'objet pointé ne doit pas être libéré "trop vite"
    • la durée de vie du pointeur. On peut passer 1 pointeur pour modifier 1 objet mais "localement". Ou inversement, on doit faire des tables d'objets/ de correspondance, et on utilise des pointeurs parce que cela va + plus vite à trier (pour déplacer les éléments).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. L'utilisation des jeux augmente de 75 % en raison de l'épidémie du coronavirus
    Par Bill Fassinou dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 18/03/2020, 16h26
  2. Réponses: 2
    Dernier message: 28/06/2018, 08h30
  3. Réponses: 1
    Dernier message: 12/08/2011, 15h25
  4. Réponses: 3
    Dernier message: 19/09/2009, 16h37
  5. utiliser des conteneurs triés stl pour pointeurs, utile?
    Par Pacorabanix dans le forum SL & STL
    Réponses: 13
    Dernier message: 08/12/2007, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo