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

    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.

###raw>template_hook.ano_emploi###