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++ Discussion :

Mémoire statique/dynamique ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut Mémoire statique/dynamique ?
    Bonjour à tous et à toutes,
    Non je ne vais pas poser la question noobienne que beaucoup ne doivent plus supporter c'est à dire quelle est la différence entre mémoire statique et dynamique
    Non ma question est : que se passe-t-il au niveau de la mémoire quand je créé une classe Engine qui va être la classe de plus au niveau et qui va gérer énormément d'autres classes (enfin leur instance), enfaite tout mon programme.
    Et que l'instance de cette classe est créé dynamiquement ?
    Donc un truc du genre Engine* pEngine = new Engine();
    Est-ce une catastrophe qui va faire que tout ce qui va en découler sera de la mémoire dynamique (je suppose que oui) et donc sera plus difficile a gérer par l'application ou bien est-ce que ça n'a pas vraiment d'importance ?
    Si quelqu'un pouvait me donner de petits détails sur les performances read/write sur la mémoire statique et dynamique aussi, je veux rien de précis mais plutôt un comparatif entre les deux ^^
    Merci beaucoup

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    A mon avis, quand le programme s'exécute, ce que tu appelles mémoire statique ou mémoire dynamique (je pense que ce n'est pas les mots qu'il faudrait employer mais je ne sais pas quoi te proposer), tout cela c'est en RAM et donc les temps d'accès et les performances sont les mêmes.

    A moins que tu veuilles parler des différences "mémoire ROM" versus "mémoire RAM"
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    A mon avis, quand le programme s'exécute, ce que tu appelles mémoire statique ou mémoire dynamique (je pense que ce n'est pas les mots qu'il faudrait employer mais je ne sais pas quoi te proposer)
    Je dirais pile et tas, respectivement
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  4. #4
    Membre chevronné
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    Est-ce une catastrophe qui va faire que tout ce qui va en découler sera de la mémoire dynamique
    En effet, mais ce n'est pas si catastrophique !

    Citation Envoyé par oxyde356 Voir le message
    et donc sera plus difficile a gérer par l'application ou bien est-ce que ça n'a pas vraiment d'importance ?
    Un peu plus lent, oui.

    Citation Envoyé par oxyde356 Voir le message
    Si quelqu'un pouvait me donner de petits détails sur les performances read/write sur la mémoire statique et dynamique aussi, je veux rien de précis mais plutôt un comparatif entre les deux ^^
    Je pense que cet article répondra à beaucoup de tes questions !
    http://fr.wikipedia.org/wiki/Allocation_de_mémoire
    Cours : Initiation à CMake
    Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours)
    Ce message a été tapé avec un clavier en disposition bépo.

  5. #5
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    Oui je parlais bien du pile et du tas.
    Merci beaucoup pour vos réponses sa m'a bien éclairer, enfaite j'ai fini de faire un petit jeu bomberman, avec menus, transitions, campagne solo avec IA, multi et un code somme toute bien structuré il me semble.
    Et je me demandais si j'aurais pas l'air d'une tache en le publiant, si ma classe principale était foireuse ou plutôt non standard enfin bref vous m'avez compris ^^
    Enfaite je voulais que mon unique instanciation du moteur soit la seule variable global de mon programme et je n'y arrivais pas en créant mon instance sur la pile. Alors j'ai créé un pointeur pour mon moteur en global et puis j'ai simplement fait un new dans mon main. Enfaite j'ai trouvé une solution plus approprié je pense, en tout cas sa marche m'enfin sa encore heureux lol.
    J'ai créée un pointeur global de type Engine(*) et je le fais pointé sur l'instance qui est créée sur la pile dans le main. Comme sa rien n'ai créé sur le tas enfin dans cette partie là.
    Qu'est ce que vous pensez de cette solution ?

    Dans un autre de mes moteurs (en DirectX cette fois m'enfin sa change rien) au lieu de créer une variable/pointeur global j'ai instancié un objet Engine dans mon main et je le propage à toutes les objets membres.
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Engine
    {
       Voiture A;
       Explosion B;
      ...
     
      void Framemove() {A.Framemove(this); B.Framemove(this);};
      ...
    };
    Que pensez-vous de cette autre solution ?
    Pour vous quelle est la meilleur des deux ?

    Et enfin est-ce que vous auriez des exemples de structures de jeux vidéos "professionnels". Je sais qu'il n'y a pas une solution meilleur que toute mais j'aimerai bien savoir a quoi ressemble une vrai structure d'un vrai jeu.

    Merci à tous

  6. #6
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Hmmm ça me rapelle la fois ou dans un jeu on avait un objet représentant le jeu (ou plutot gérant l'état général du jeu) comme ici, et il était déclaré sur la pile...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main()
    {
            Application application;
            return application.run();
    }
    ... et a force d'ajouter des membres dans la classe Application (par exemple des managers des différentes parties du jeu), on a dépassé la mémoire réservée à la pile (sur console, c'est assez facile...et provoque souvent des erreurs pas claires du tout).

    Du coup, on a changé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main()
    {
            Application* application = new Application;
            int result = application->run();
            delete application;
            return result;
    }
    La taille de l'objet est a prendre en considération dans ce genre de choix.

  7. #7
    Membre très actif Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Par défaut
    Citation Envoyé par Klaim Voir le message
    Hmmm ça me rapelle la fois ou dans un jeu on avait un objet représentant le jeu (ou plutot gérant l'état général du jeu) comme ici, et il était déclaré sur le tas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int main()
    {
            Application application;
            return application.run();
    }
    Tu veux dire sur la pile dans ce cas la non ?

    Et puis quand le programme se démarre, sa pile ne peut-elle pas prendre toute la ram libre ?
    Je ne vois pas trop pourquoi tu as eu un dépassement de mémoire, peux-tu expliciter s'il te plait ?
    Merci

  8. #8
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Oups, erreur de traduction de ma part, tu as raison - corrigé

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/04/2012, 11h27
  2. Allocation de mémoire statique
    Par cmarcx dans le forum Delphi
    Réponses: 12
    Dernier message: 04/08/2007, 13h29
  3. probleme mémoire allouer dynamiquement
    Par Blo0d4x3 dans le forum C
    Réponses: 10
    Dernier message: 30/04/2007, 17h44
  4. Mémoire dynamique / Mémoire statique
    Par _LVEB_ dans le forum C++
    Réponses: 8
    Dernier message: 02/04/2007, 23h33
  5. librairie statique/dynamique
    Par trop_wizz dans le forum MFC
    Réponses: 4
    Dernier message: 11/04/2005, 10h04

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