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 :

Représentation des tableaux en mémoire


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2011
    Messages : 61
    Points : 65
    Points
    65
    Par défaut Représentation des tableaux en mémoire
    Bonjour,
    voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int main(int argc, char **argv)
    {
        ifstream f;
        char c [5];
        char * ch = new char [5];
        f.open("testfic.tmp");
        f.read(c,sizeof(c)-1);
        f.read(ch,5);
        cout<<c;
        cout<<ch;
        f.close();
        delete [] ch;
        return 0;
    }
    Si j'ai bien compris , à la ligne 5 on déclare un tableau ch de 5 caractères et ce tableau sera dans la heap alors qu'en ligne 4 on déclare un tableau de 5 caractères mais il sera dans la pile (stack).
    - Es ce que c'est ça ou es ce que je me trompe ? (comment le traduire en français )
    - Faut-il privilégier une écriture plus qu'une autre? et pourquoi?
    Merci

  2. #2
    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
    Non ce sont les bonnes traductions : pile/ stack et heap/ tas.

    Après c'est évident le pourquoi du comment de le chose. Je te renvoie au cours sur les pointeurs en C
    Mais en gros, tout ce qui est variable locale (donc dans la pile) est figé (sa structure) par le compilateur et mis dans le code.
    Tout le reste ce sont des variables dynamiques qui peuvent être créées/ modifiées (sa structure)/ supprimées en cours d’exécution (parce que justement dans le tas)

    Ton 1ier tableau c ne pourra être ni étendu ni rétréci et tu ne pourras pas le supprimer (mais il sera détruit automatiquement à la fin du bloc).

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour

    - Faut-il privilégier une écriture plus qu'une autre? et pourquoi?
    Une variable sur le pile est locale au bloc où elle a été créée. Elle n'existe plus quand ce bloc se termine. Ainsi, si tu crées une variable (un tableau étant une variable) sur la pile dans une fonction, tu ne peux pas renvoyer son adresse à la fonction appelante, tu dois en renvoyer une copie. Et copier, ça peut être coûteux. Tu n'as pas les mêmes contraintes avec une variable créée dans le tas, elle survit jusqu'à ce que tu la détruises avec delete.

    En C++ moderne, tu ne devrais jamais (ou presque) écrire des new et des delete à la main. Je t'encourage à regarder ce qu'on appelle les "pointeurs intelligents" : std::unique_ptr, std::shared_ptr, std::make_unique, std::make_shared, etc. Je t'encourage aussi vivement à t'intéresser au concept de RAII.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/04/2016, 23h53
  2. représentation des tableaux dans la mémoire
    Par stracoma dans le forum Général Java
    Réponses: 2
    Dernier message: 06/12/2015, 11h45
  3. Représentation des données dans la mémoire
    Par lassault1 dans le forum C
    Réponses: 10
    Dernier message: 03/04/2010, 16h12
  4. Problème en mémoire avec des tableaux
    Par dword2add dans le forum C++
    Réponses: 3
    Dernier message: 11/11/2007, 13h36
  5. Réponses: 11
    Dernier message: 16/07/2007, 16h33

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