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

  1. #1
    Membre éprouvé 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
    Points : 1 087
    Points
    1 087
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    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 éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    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 éclairé
    Avatar de Florian Goo
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    680
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    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 éprouvé 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
    Points : 1 087
    Points
    1 087
    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
    Points : 3 344
    Points
    3 344
    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 éprouvé 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
    Points : 1 087
    Points
    1 087
    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
    Points : 3 344
    Points
    3 344
    Par défaut
    Oups, erreur de traduction de ma part, tu as raison - corrigé

  9. #9
    Membre éprouvé 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
    Points : 1 087
    Points
    1 087
    Par défaut
    D'accord mais pourquoi la pile ne peut pas être aussi grande que le tas ? Parce qu'elle doit être contigu ?
    Parce que il y a + de mémoire allouée pour le tas que pour la pile par le système d'exploitation ?
    Merci

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je dirais les deux.
    Bien sur, sous les systèmes d'exploitation modernes, chaque processus peut avoir sa pile sans se soucier du mappage physique, du moment que la mémoire lui apparait contigüe dans ses 2Go inférieurs de mémoire virtuelle (sous Windows, les 2Go supérieurs sont réservés au kernel). Et bien que la pile fasse par défaut 1Mo sous Windows, il est évidemment possible de l'agrandir.

    Mais traditionnellement, on met le moins possible dans la pile et le plus possible dans le tas. Ce qui a l'avantage de réduire la vulnérabilité des logiciels aux attaques par dépassement de tampon, qui se font typiquement avec des tampons dans la pile.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    D'accord mais pourquoi la pile ne peut pas être aussi grande que le tas ? Parce qu'elle doit être contigu ?
    Parce que il y a + de mémoire allouée pour le tas que pour la pile par le système d'exploitation ?
    Merci
    C'est surtout que, traditionellement, la pile n'est pas redimensionnable à souhait... et que du coup, par défaut, un OS n'alloue que très peu à une pile d'execution.

    Prenons un exemple simple: j'ai en cours d'execution, 79 processes qui utilisent 1130 threads. Si on alloue 1Mo à chaque thread (ou fiber), ca donne déjà 1Go d'utilisé !!!! Donc par défaut la pile allouée aux threads doit être *vraiment* petite. D'ailleurs, elle ne contient, en général, que des variables temporaires d'execution, et la plupart du temps, on n'accède que très peu aux variables des contextes d'appel(s) précédant(s).

    Pour ton cas précis, et contrairement à ce qui a été dit, l'allocation d'un "engine" dans la pile ou le tas ne fait absoluement aucune différence de rapidité... Cet objet est en général créé une seule fois au démarrage (et on n'est pas à quelques ns pret à ce moment là) et détruit quand on quitte l'application. Comme il est appellé environ 1 million de fois par seconde (bon j'exagère un peu... mais à peine), je suis prêt à parier qu'il sera en cache L2 de toute manière.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  12. #12
    Membre éprouvé 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
    Points : 1 087
    Points
    1 087
    Par défaut
    Effectivement cette histoire de taille par défaut de la pile ne concerne pas mon programme.
    Si la pile doit être contigu (quelqu'un en est sûr ?) je pencherai plutôt pour le tas, histoire que même dans les toutes petites configs disposant de peu de mémoire (qui plus est fragmenté) le programme puisse se lancer, s'il n'y a pas de différence de performances notable.
    Après je sais pas, il faudrait faire un sondage Qui est pour la pile, qui est pour le tas et pourquoi ? ^^
    Par contre vu que le tas risque à 99% d'être fragmenté c'est des accès mémoires en plus je suppose ? donc moins performant.
    Il faut aussi que je vous informe que la plupart des membres de la classe Engine sont des pointeurs que je fais pointé sur de la mémoire allouée sur le tas. Donc au final Engine ne contiendra pas d'objets membres vraiment lourds, m'enfin c'est toujours possible on sait jamais .
    Ok je chipote m'enfin j'aimerais vraiment trouver le plus performant
    Alors si vous avez des idées sur lequel est le plus performant dans mon cas, n'hésitez pas a alimenter ce topic sa m'instruit beaucoup merci à vous

  13. #13
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    Si la pile doit être contigu (quelqu'un en est sûr ?)
    Heu oui, c'est sûr sinon, cela ne marcherai pas lors des retours de fonction

    Citation Envoyé par oxyde356 Voir le message
    Par contre vu que le tas risque à 99% d'être fragmenté c'est des accès mémoires en plus je suppose ? donc moins performant.
    NON, le temps d'allocation est plus long, cela c'est sûr. Le malloc/new doit locker et parcourir le tas à la recherche d'un bloc libre et suffisant, c'est du temps de calcul. Mais une fois le bloc alloué dans le tas, le temps d'accès est strictement le même que sur la pile, c'est de la 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
    .

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Si les données ont la même durée de vie que l'application, on peut aussi les allouer "statiquement".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Application application;
    int main()
    {
            return application.run();
    }
    Pour faire simple la mémoire utilisée peut être divisée en zones
    • statique: le code et les données statiques
    • pile: le contexte d'exécution
    • tas: ce qui pourra être alloué dynamiquement

    La mémoire disponible est généralement considéré comme un espace contigu dont les zones seront dimensionnées lors de l'activation. Lorsqu'on a fini de charger code et données statique, on sait ou pourra commencer la pile. Mais si on ne donne pas de limite à la taille de cette pile, impossible de savoir ou commencera le tas.
    => en général il est possible d'augmenter la taille de la pile "par défaut" et si cela ne suffit pas, il est toujours possible de construire sa propre pile "dans le tas".
    La
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 680
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    Si la pile doit être contigu (quelqu'un en est sûr ?)
    Ne te pose pas tant de questions ! On dit qu'en C++ il faut gérer la mémoire manuellement, mais bon, faut pas déconner, on est pas en assembleur non-plus… le langage fait beaucoup de choses par lui-même.
    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.

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Si les données ont la même durée de vie que l'application, on peut aussi les allouer "statiquement".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Application application;
    int main()
    {
            return application.run();
    }
    Pour faire simple la mémoire utilisée peut être divisée en zones
    • statique: le code et les données statiques
    • pile: le contexte d'exécution
    • tas: ce qui pourra être alloué dynamiquement

    La mémoire disponible est généralement considéré comme un espace contigu dont les zones seront dimensionnées lors de l'activation. Lorsqu'on a fini de charger code et données statique, on sait ou pourra commencer la pile. Mais si on ne donne pas de limite à la taille de cette pile, impossible de savoir ou commencera le tas.
    => en général il est possible d'augmenter la taille de la pile "par défaut" et si cela ne suffit pas, il est toujours possible de construire sa propre pile "dans le tas".

    Historiquement, la pile est "contigue". Cela permet de supporter les appels de fonction "call/return" qui côté machine se traduisent par empiler/dépiler l'adresse de retour. Comme l'allocation "dans la pile" ne nécessite que l'ajustement du pointeur de pile, on y alloue aussi les variables locales.

    => c'est la raison pour laquelle allouer "sur la pile" est plus performant qu'allouer "dans le tas"

    Note: on peut aussi chainer les handlers d'exceptions pour pouvoir retomber sur ses pattes, s'il le faut, en "dépilant" sauvagement... Mais dans ce cas, on est bien embêté par tout ce qui a pu être alloué sur le "tas" sauf si on s'attache à appliquer des patterns de type RAII
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #17
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Dans tous les cas... là on parle d'un objet UNIQUE alloué UNE SEULE FOIS au démarrage de l'application.

    Si l'objet peut être gros, ou il peut être dynamique (overridable quoi) => new
    Si l'objet est statique => static
    Si l'objet est tout petit petit => pile


    Et non, la taille de la pile n'est pas redimensionable, on peut la modifier à la compilation, mais c'est tout (allez... d'accord, on peut jouer avec le minimum de taille alloué pour le unframe d'exceptions).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Et non, la taille de la pile n'est pas redimensionable, on peut la modifier à la compilation, mais c'est tout (allez... d'accord, on peut jouer avec le minimum de taille alloué pour le unframe d'exceptions).
    Sous linux, elle peut être modifiée via ulimit.
    La primitive BSD/Linux sstk (set stack size) permet de modifier dynamiquement la taille de la pile - mais ne fonctionne que sur certains processeurs -.

    Le défaut d'API n'interdit pas de faire sa propre cuisine et de constuire sa pile à partir d'une liste de blocks mémoire alloué sur le tas.
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #19
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Dans tous les cas... là on parle d'un objet UNIQUE alloué UNE SEULE FOIS au démarrage de l'application.
    Dans ce cas ne devrait-il pas en faire un singleton ? (mémoire statique)
    Linux > *

  20. #20
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Un singleton n'est pas forcément en mémoire statique.
    D'ailleurs, l'implémentation conseillée du motif utilise un objet sur le Tas, et seulement un pointeur vers lui stocké en mémoire statique.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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