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

Langage C++ Discussion :

différents segements de la mémoire


Sujet :

Langage C++

  1. #21
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    Bonjour,

    Les mots clé new et delete seraient donc obsolète?
    Je dois être drôlement en retard
    Comme le fait remarquer Jean-Marc.Bourguet , ils sont encapsulés.
    En C++, on ne manipule presque plus de pointeur brut, on préfère des pointeurs intelligents (boost, ceux de C++1x) qui garantissent une destruction transparente via le RAII et assure un code exception-safe.

    De même, on ne manipule ni new[] pour les tableaux (ni des maillons pour les listes) mais std::vector et std::list qui garantissent un code exception-safe et offrent de nombreuses facilités pour la gestion de la mémoire (en gros, tu n'as plus à t'en soucier).

    Si tu veux approfondir cela, regarde la FAQ C++.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  2. #22
    Invité
    Invité(e)
    Par défaut
    Merci,
    J'ai pas tout lu dans la FAQ, mais je n'ai que C++ Builder 6.
    Je ne peux qu'en déduire que je suis un (void*)NULL.
    En matière de développement, ça va pas mal, merci, en matière de programmation, par contre, j'ai certainement beaucoup à apprendre. Mais les langues, ça n'a jamais été mon fort.
    D'une façon générale, je considère qu'on ne doit pas demander à une machine de faire ce qu'on ne saurait pas faire à la main, ou qu'on ne saurait pas expliquer. C'est surtout vrai dans un domaine que je connais un peu (CAO - SIG) mais c'est vrai aussi en informatique. Il me parait choquant qu'on apprenne à des étudiants à utiliser std::string s'ils ne savent pas ce qu'est une chaine, un 0 terminal etc.
    Cordialement.

  3. #23
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Tu vas trouver dans le C++ notions de "données allouées sur la pile" , "sur le tas", "données statiques" et enfin "données contiguës en mémoire"
    Je peux me tromper mais il me semble que la norme ne parle jamais de tas ou de pile. Ce qui est précisé ce sont les durées de vie, les appels (automatique ou non) aux constructeurs/destructeurs. En revanche, en théorie, rien n'oblige d'avoir un tas et une pile (certains systèmes embarqués ne travaillent qu'avec une pile et n'ont pas de tas).

    Citation Envoyé par Pierre Dolez Voir le message
    D'une façon générale, je considère qu'on ne doit pas demander à une machine de faire ce qu'on ne saurait pas faire à la main, ou qu'on ne saurait pas expliquer. C'est surtout vrai dans un domaine que je connais un peu (CAO - SIG) mais c'est vrai aussi en informatique. Il me parait choquant qu'on apprenne à des étudiants à utiliser std::string s'ils ne savent pas ce qu'est une chaine, un 0 terminal etc.
    A un moment il faut savoir travailler avec des concepts donnés comme tels. On apprend à compter (au CP) avant de définir les nombres (bac + des bananes) 'mathématiquement'. Une fois qu'on a assimilé un certain nombre de ces concepts, effectivement, il est enrichissant d'aller plus loin. Mais c'est toujours le vieux débat bottom/up vs up/bottom.

  4. #24
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 70
    Par défaut
    Il est possible de ne pas avoir de tas, dans ce cas tu n'as ni malloc() ni new, et donc toutes tes variables et objets sont soit sur la pile (variables locales, plus alloca()) soit globales (vraies globales, ou static dans un fichier, une classe ou une fonction). Il est courant en embarqué de ne pas avoir de tas. Par exemple le CPU qui est dans ta souris a probablement quelque chose comme 128 octets de RAM et pas vraiment besoin d'allocation dynamique (ni de C++ d'ailleurs !...)

    Ne pas avoir de pile ne permettrait pas de faire d'appels de fonctions et t'interdirait les variables locales, par conséquent les programmes que tu pourrais écrire seraient quelque peu limités

    Je comprend par cela que les segments cités peuvent être considérés par le compilateur et le linker et pourquoi pas garder cette représentation en segments dans la gestion de la mémoire physique.
    Raisons diverses, entre autres le CPU gère la mémoire sous forme de pages (généralement 4k) et les segments de ton exécutables ne sont pas en multiples de 4k. Aussi ce sont 2 choses différentes, l'OS gère toute la RAM pas juste celle où tu charges ton exécutable.

  5. #25
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par peufeu Voir le message
    Ne pas avoir de pile ne permettrait pas de faire d'appels de fonctions et t'interdirait les variables locales, par conséquent les programmes que tu pourrais écrire seraient quelque peu limités
    Il y a eu un certain nombre de processeurs sans pile hard. Une partie du folklore sur le cout de la recursivite vient de ces processeurs -- sur lesquels une fonction recursive doit gerer "manuellement" une pile tandis qu'une fonction non recursive peut utiliser d'autres techniques mieux supportees par le processeur. Il y a toujours des processeurs RISC qui n'ont pas de pile, juste une convention bien etablie (et parfois imposee par l'OS) d'utiliser un registre donne comme pointeur de pile; mais ce registre n'a rien de special par rapport aux autres.

  6. #26
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 70
    Par défaut
    > Il y a toujours des processeurs RISC qui n'ont pas de pile

    Quelle que soit l'implémentation (registre spécifié par le hard ou la convention), à partir du moment où tu empiles des trucs dessus, c'est une pile

  7. #27
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par peufeu Voir le message
    > Il y a toujours des processeurs RISC qui n'ont pas de pile

    Quelle que soit l'implémentation (registre spécifié par le hard ou la convention), à partir du moment où tu empiles des trucs dessus, c'est une pile
    Rien ne t'oblige a faire une pile. C'est juste une convention et en embarque particulièrement, on peut désirer ne pas la suivre. Mais on ne concevra vraisemblablement plus des processeurs sur lesquels avoir une pile est beaucoup plus coûteux que les autres choix.

  8. #28
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par Pierre Dolez Voir le message
    <snip>Il me parait choquant qu'on apprenne à des étudiants à utiliser std::string s'ils ne savent pas ce qu'est une chaine, un 0 terminal etc.
    Cordialement.
    Il ne faut pas oublier non plus que les notions même d'allocation dynamique, de pointeur ou de 0 terminal sont propres au C et aux autres langages qui s'en sont plus ou moins inspiré.

    La notion d'entier elle-même n'est jamais qu'une manière de voir les choses que les développeurs originels de ces langages ont décidé d'utiliser / de reprendre.

    Je sais que c'est un vieux langage de niche, mais, si tu venais à t'intéresser un peu à cobol, par exemple, tu aurais de grandes chances de tomber des nues si tu considères ces quelques concepts comme inébranlables et "universels"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #29
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Il me parait choquant qu'on apprenne à des étudiants à utiliser std::string s'ils ne savent pas ce qu'est une chaine, un 0 terminal etc.
    Pour conduire, on te donne une formation complète sur comment marche un moteur ?

    Et ben pour la programmation c'est pareil. Pas besoin de savoir comment marche une chose pour l'utiliser, suffit de savoir lire un mode d'emploi. Pour utiliser std::string, il suffit de lire la documentation.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  10. #30
    Invité
    Invité(e)
    Par défaut
    Je suis assez d'accord avec la comparaison du permis de conduire, et je crois me souvenir que le code de la route utilisé par mes enfants comportait un chapitre sur les moteurs, la direction et je ne sais quoi.
    Mais comme il y a bien longtemps que l'ai passé, je ne me souviens plus les détails, mais je savais très bien comment fonctionnait un moteur.

    Pour en revenir à l'informatique, j'ai utilisé beaucoup de langages, mais pas le Cobol. Par contre, je ne crois pas qu'on aurait réussi à me faire écrire une instruction si je ne savais pas ce que ça voulait dire.
    Pour vérifier que ma façon de voir les choses n'est pas tout à fait débile, il suffit de lire les questions posées, en particulier à propos de chaines de caractères.

    Il ne faut pas oublier non plus que les notions même d'allocation dynamique, de pointeur ou de 0 terminal sont propres au C et aux autres langages qui s'en sont plus ou moins inspiré.
    ... et le langage C++ est une extension du C (citation d'un modérateur sur ce forum) cf réponse précédente, mais qu'on ne me demande pas de nouveau l'url

    C'est un sujet auquel j'attache de l'importance, en programmation comme en utilisation, mais cela fait l'objet d'un autre forum.
    J'ai des exemples très précis, mais je ne les expliquerai pas en public.

    Bonne soirée.

  11. #31
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    ... et le langage C++ est une extension du C (citation d'un modérateur sur ce forum) cf réponse précédente, mais qu'on ne me demande pas de nouveau l'url
    Les modérateurs ne disent pas que des choses vraie... la preuve ici .
    Non le langage C++ n'est pas le C. Ni même une extension. (cf le Père).
    Y'a déjà eu des tonnes de discussion sur ça ici.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Calculer l'occupation mémoire de différents Threads?
    Par Cromthetrue dans le forum Général Java
    Réponses: 5
    Dernier message: 07/06/2008, 04h42
  2. Réponses: 4
    Dernier message: 07/01/2008, 12h19
  3. Libération mémoire; différents pointeurs
    Par icer dans le forum Débuter
    Réponses: 11
    Dernier message: 12/12/2007, 18h35
  4. [Tableaux] Taille en mémoire des différents fetch
    Par dorian53 dans le forum Langage
    Réponses: 4
    Dernier message: 18/07/2007, 12h46

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