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 :

Gros Tableaux en C [En attente]


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 0
    Points
    0
    Par défaut Gros Tableaux en C
    Bonjour,

    Je programme en C++ avec Code::Block sous Windows 7.

    J'ai deux tableaux: un de dimension 3000 et un autre de dimension 1500. Les éléments sont des tableau de dimensions 500000 de char.

    La compilation se passe sans problème mais quand inexécutable se lance le message de fin d’exécution apparait directement.

    Je voudrai savoir si il a des paramètres à modifier pour permettre a l exécutable de se lancer normalement.

    Merci

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Peux-tu nous montrer le message d'erreur ?
    Peux-tu nous montrer ton code?

    As-tu essayé de passer par des tableau de pointeur au lieu de faire des tableau 2D ?

  3. #3
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    (3000+1500)*500000 = 2250000000
    2,25G.
    Normal que windows préfère faire planter ton programme que de lui allouer 2,25G de stack.
    Peut-être faudrait-il essayer de le lancer en mode administrateur, si il n'y a aucun moyen de se débrouiller pour prendre moins de mémoire ?

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Ekleog Voir le message
    (3000+1500)*500000 = 2250000000
    2,25G.
    Normal que windows préfère faire planter ton programme que de lui allouer 2,25G de stack.
    Peut-être faudrait-il essayer de le lancer en mode administrateur, si il n'y a aucun moyen de se débrouiller pour prendre moins de mémoire ?
    Oui le probleme est la evidemment. Notons que ca marche avec (1500+1500)*500000
    De plus, 2250000000 octets ne fais en fait "que" 2,14Go !

    J'ai essayer de lancer code::block en mode administrateur mais c est exactement pareil. Je ne peux pas lancer l executable en mode administrateur car quand je lance le .exe cree windows me dit: BlahBlahBlah.exe is not a valid Win32 application.

    Je pourrai me debrouiller pour diviser la taille par 4 mais je vais avoir plus de donnees a prendre en compte bientot donc ca ne fera que repouser le probleme...

    Merci

  5. #5
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    Citation Envoyé par Emmanuel_exeter Voir le message
    Oui le probleme est la evidemment. Notons que ca marche avec (1500+1500)*500000
    De plus, 2250000000 octets ne fais en fait "que" 2,14Go !
    Faux. Ca fait 2,25Go. Et 2,095Gio. Oui, les unités standard sont moches.
    "Preuve" en une session shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ units 
    2526 units, 72 prefixes, 56 nonlinear units
     
    You have: 2250000000 octets
    You want: gigaoctets
            * 2.25
            / 0.44444444
    You have: 2250000000 octets
    You want: gibioctets
            * 2.0954758
            / 0.47721859
    J'ai essayer de lancer code::block en mode administrateur mais c est exactement pareil. Je ne peux pas lancer l executable en mode administrateur car quand je lance le .exe cree windows me dit: BlahBlahBlah.exe is not a valid Win32 application.
    Il y a un problème avec ta compilation alors. Il ne dit que ça ? As-tu bien tenté de recompiler et d'aller chercher la version release ?

    Je pourrai me debrouiller pour diviser la taille par 4 mais je vais avoir plus de donnees a prendre en compte bientot donc ca ne fera que repouser le probleme...

    Merci
    Je ne sais pas combien tu as de RAM, mais si tu peux diviser la taille par 4, fais le. Parce que mieux vaut ça qu'acheter 4 fois plus de RAM. Non ?

    Par ailleurs, il est normal que windows bloque une utilisation qui tente d'utiliser autant de RAM. Sinon, tu en lances 3, et tu fais crasher l'ordinateur. Comportement d'un virus basique.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    A la compilation j ai ca:

    Compiling: main1.cpp
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 0 warnings

    mais quand il execute, j ai ca:

    Process returned 0 (0x0) execution time : 0.002 s
    Press any key to continue.

    et la version release n est pas une application Windows valide.

    J ai 8.00 GB de RAM donc normalement assez pour gerer mais tableaux.

    Merci

  7. #7
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    Etrange...

    En tout cas, il est normal que windows bloque ton application : si un virus (basique) voulait attaquer ton ordinateur, il pourrait allouer 2G en boucle pour tout faire exploser. Du coup, il y a (normalement, je connais mal win) une limite maximale à l'espace mémoire d'un processus.

    Es-tu sûr que tu affiches quelque chose dans ton programme ? Il peut être normal que le message de fin d'application s'affiche.

    Pourquoi ta version release n'est-elle pas une application windows valide ? Le problème vient peut-être de là. As-tu touché à des options de configuration ?

    Ta version debug est-elle une application valide ?

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Est-ce que tu peux nous montrer ton code?


    Si ton programme retourne 0 c'est que l'exécution s'est bien passé.

    Tu t'es peut être trompé en faisant des exit 0 (ou des return 0 dans le main) en cas d'erreurs.
    Tu t'es peut être trompé sur certaines conditions qui font que ton programme n'affiche rien au final.

    As-tu essayé de mettre des printf un peu de partout pour voir si ils sont affiché et ainsi où ton programme se comporterait bizarrement?

    Ton problème ne vient pas de l'allocation, en cas d'erreur, tu as soit un SEGFAULT soit un STACK OVERFLOW.

  9. #9
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    Sauf s'il compile toujours en release, auquel cas windows dissimule le segfault / SO en une erreur "anonyme", comme celle dont il parle. Enfin, je crois. Parce que s'il n'y a pas de SO à 2GB, il y a franchement un problème...

  10. #10
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par Ekleog Voir le message
    Sauf s'il compile toujours en release, auquel cas windows dissimule le segfault / SO en une erreur "anonyme", comme celle dont il parle. Enfin, je crois. Parce que s'il n'y a pas de SO à 2GB, il y a franchement un problème...
    Je sais que Windows aime dissimuler des messages d'erreurs, mais elle n'a aucun intérêt à dissimuler les messages d'erreurs des autres.

    Essaye de compilé sous Linux voir ce que ça donne.
    Même si je doute qu'on ai un résultat bien différent.

    Pour ce message :
    BlahBlahBlah.exe is not a valid Win32 application.
    Avec quoi compiles-tu?



    Citation Envoyé par http://www.computerhope.com/issues/ch000726.htm
    C:\Program Files\myprogram\program.exe is not a valid Win32 application.
    Cause

    This issue can be caused by any of the below possibilities.

    File is corrupt, bad, or missing.
    File is not designed for your version of Windows.
    File is a virus, worm, or other malware file.
    Hardware incompatibility.

    [....]

    File is a virus, worm, or other malware file

    This error can be generated by a file that is a virus, worm, Trojan, or other malware file. Often, this will be caused because the virus scanner installed in the computer will not allow the file to be installed or run. Try scanning the file to verify it is not a virus or infected.

    If the file has been checked and is clean, it is still possible that the virus protection program or another program installed on the computer is causing issues during the install or execution of the program. Boot the computer into Safe Mode and try running the program; booting the computer into Safe Mode will make sure nothing is running in the background that could be causing this issue.
    Quand on a un message d'erreur, rien qu'en le tapant dans un moteur de recherche, on arrive souvent à avoir des réponses.
    Essaye de booter en mode sans échec et de lancer ton programme.

  11. #11
    Invité
    Invité(e)
    Par défaut
    salut,

    question bête, tu fais bien une allocation dynamique?

    Parce que si tu tapes dans la stack, c'est clair que ton exe planteras.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Bonjour,
    Voici un code qui fonctionne a la compilation et a l'exécution parfaitement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <iostream>
    using namespace std;
     
    #define A 49294
    #define NB_1 3004
    #define NB_2 1999
     
    struct individu_structure
    {   char tab[A];
        int etat;
    };
     
    individu_structure tabindividu[NB_1];
     
    individu_structure tabindividu2[NB_2];
     
    int main()
    {
        cout << "Hello world!" << endl;
        return 0;
    }
    Il affiche:

    Hello world!

    Process returned 0 (0x0) execution time : 0.025 s
    Press any key to continue.
    Puis un code avec le volume de data dont j ai besoin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <iostream>
    using namespace std;
     
    #define A 490294
    #define NB_1 3004
    #define NB_2 1999
     
    struct individu_structure
    {   char tab[A];
        int etat;
    };
     
    individu_structure tabindividu[NB_1];
     
    individu_structure tabindividu2[NB_2];
     
    int main()
    {
        cout << "Hello world!" << endl;
        return 0;
    }
    Et la il affiche:

    Process returned 0 (0x0) execution time : 0.025 s
    Press any key to continue.
    Et le point exe engendrer en mode Release tout comme en mode Debug est non valide.

    Je compile avec Code::Block qui lance gcc a la compilation

  13. #13
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    C'est très étrange...
    Le problème, c'est que ton programme doit planter avant même d'entrer dans le main.

    Essaye déjà de ne pas utiliser de variables globales.


    Que te donne ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #include <iostream>
    using namespace std;
     
    #define A 490294
    #define NB_1 3004
    #define NB_2 1999
     
    struct individu_structure
    { char tab[A];
    int etat;
    };
     
    int main()
    {
    cout << "Hello world!" << endl;
     
    individu_structure tabindividu[NB_1];
    cout << "1" << endl;
    individu_structure tabindividu2[NB_2];
    cout << "2" << endl;
    return 0;
    }
    Sinon pense à utiliser les balises CODE quand tu pose du code ici.

  14. #14
    Membre éclairé
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Points : 879
    Points
    879
    Par défaut
    Le fait que le programme soit non valide vient probablement du fait que tu as trop de données dans des globales.
    Par ailleurs, pourrais-tu chercher le seuil auquel ça passe de "marche" à "marche pas" ? Ce chiffre pourrait nous aider à trouver ce qui cause le problème.

    D'ailleurs, as-tu testé ton programme avec ton anti-virus ? Peut-être celui-ci pense-t-il que c'est un virus.

    Enfin, sous linux, je n'ai aucun problème pour utiliser ce programme. Enfin, je compile avec -O2, peut-être qu'il retire carrément les variables globales, vu qu'elles ne sont pas utilisées.

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    sans variable global c est la loose ca plante pour deja A=49 NB1=3004 et NB2=1999.
    Si c est pour etre aussi limiter autant que je reprenne un amstrad 6128 !

    D autre part pour la limite: A=490294 NB1=1904 et NB2=1999 ca marche mais A=490294 NB1=2004 et NB2=1999 ca plante.

    Sous linux si ces variables sont ignorees par ta directive alors tu n utilise rien du tous !

  16. #16
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    C'est tout à fait normal, les variables globales sont allouée sur le tas alors que les variables locales sont allouée sur la pile.

    Là tu as un message d'erreur, c'est déjà bon signe.

    Maintenant, il ne te reste plus qu'à faire des new[] (et bien penser à faire les delete[]) pour allouer dynamiquement tes tableaux.
    Ainsi tu alloueras sur le tas.

    Après, reste à voir si tu as encore des messages d'erreurs ou non.


    Sinon, comme on est en C++, pourquoi ne pas utiliser des vector ou des array?

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Faux !
    Je n'ai aucun message d'erreur, le programme plante a l execution !

  18. #18
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    *hum*

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <iostream>
    using namespace std;
     
    #define A 490294
    #define NB_1 3004
    #define NB_2 1999
     
    struct individu_structure
    { char tab[A];
    int etat;
    };
     
    int main()
    {
    cout << "Hello world!" << endl;
     
    individu_structure * tabindividu = new individu_structure[NB_1];
    cout << "1" << endl;
    individu_structure * tabindividu2 = new individu_structure[NB_2];
    cout << "2" << endl;
     
    delete [] tabindividu;
    delete [] tabindividu2;
    return 0;
    }
    Compilé sous un débian virtualisé, aucun problème l'exécution se passe correctement.

    Compilé sous windows 7 on a cette erreur :
    Hello world!
    1
    terminate called after throwing an instance of 'std::bad_alloc'
    what(): std::bad_alloc

    This application has requested the Runtime to terminate it in an unusual way.
    Please contact the application's support team for more information.

    Process returned 3 (0x3) execution time : 10.387 s
    Press any key to continue.
    Il plante car il ne trouve pas l'espace nécessaire pour allouer.
    Alors je ne sais pas comment tu compiles... mais je vois bien un message d'erreur.

    D'ailleurs l'antivirus crise aussi.

    Déjà, il faudrait savoir ce que tu veux faire, as-tu réellement besoin de tableau aussi grand?


    Avec des tableaux "normaux" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #include <iostream>
    using namespace std;
     
    #define A 490294
    #define NB_1 3004
    #define NB_2 1999
     
    struct individu_structure
    { char tab[A];
    int etat;
    };
     
    int main(void)
    {
    cout << "Hello world!" << endl;
     
    individu_structure tabindividu[NB_1];
    cout << "1" << endl;
    individu_structure tabindividu2[NB_2];
    cout << "2" << endl;
    return 0;
    }
    ça ne compile pas :
    C:\Users\Neckara\Desktop\f\main.cpp||In function 'int main()'
    C:\Users\Neckara\Desktop\f\main.cpp|17|warning: unused variable 'tabindividu' [-Wunused-variable]|
    C:\Users\Neckara\Desktop\f\main.cpp|19|warning: unused variable 'tabindividu2' [-Wunused-variable]|
    C:\Users\Neckara\Desktop\f\main.cpp|13|error: total size of local objects too large|
    ||=== Build finished: 1 errors, 2 warnings ===|
    De même sous mon débian :
    neckara@NeckDebian:~/Bureau$ g++ test.cpp -o exe
    test.cpp: In function ‘int main()’:
    test.cpp:13: error: total size of local objects too large

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <iostream>
    using namespace std;
     
    #define A 490294
    #define NB_1 3004
    #define NB_2 1999
     
    struct individu_structure
    { char tab[A];
    int etat;
    };
    individu_structure tabindividu[NB_1];
    individu_structure tabindividu2[NB_2];
    int main(void)
    {
    cout << "Hello world!" << endl;
     
     
    cout << "2" << endl;
    return 0;
    }
    Il plante avant même l'arrivée dans le main, il affiche donc rien.
    Et ce que ce soit sous Débian ou windows


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <iostream>
    #include <list>
    using namespace std;
     
    #define A 490294
    #define NB_1 3004
    #define NB_2 1999
     
    struct individu_structure
    { char tab[A];
    int etat;
    };
    int main(void)
    {
    cout << "Hello world!" << endl;
    list<individu_structure> l(NB_2);
    cout << "1" << endl;
    list<individu_structure> l1(NB_1);
    cout << "2" << endl;
    return 0;
    }
    Sous windows7 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <iostream>
    #include <list>
    using namespace std;
     
    #define A 490294
    #define NB_1 3004
    #define NB_2 1999
     
    struct individu_structure
    { 
        char tab[A];
        int etat;
    };
     
    int main(void)
    {
        cout << "Hello world!" << endl;
        list<individu_structure> l(NB_2);
        cout << "1" << endl;
        list<individu_structure> l1(NB_1);
        cout << "2" << endl;
        return 0;
    }
    Y'a pas à chercher, tes tableaux sont beaucoup trop gros.

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 0
    Points
    0
    Par défaut
    Que signifi un debian virtualise?
    J ai le meme plantage avec l'utilisation de new en revanche avec des tableaux "normaux" pour moi il compile mais crash a l execution.
    C est en utilisant des variables globales que les resultats sont de tres loin les meilleurs !!!! (pour rapel ca tourne avec A 490294 NB_1 1904 NB_2 1999)
    Cependant Il crash avant d arriver dans le mail pour les dimensions de tableaux dont j ai besoin alors que ma ram unitilise est a priori suffisantes.
    Sur ma machine je peut donc allouer plus en utilisant variables globals que en passant par des new

  20. #20
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par Emmanuel_exeter Voir le message
    Que signifi un debian virtualise?
    C'est un débian que je lance dans une machine virtuelle.
    Une machine virtuelle est un ordinateur émulé.
    Je fait donc tourner un ordinateur émulé sous mon windows7 pour éviter de rebooter quand je fait des tests.


    Citation Envoyé par Emmanuel_exeter Voir le message
    J ai le meme plantage avec l'utilisation de new en revanche avec des tableaux "normaux" pour moi il compile mais crash a l execution.
    C est en utilisant des variables globales que les resultats sont de tres loin les meilleurs !!!! (pour rapel ca tourne avec A 490294 NB_1 1904 NB_2 1999)
    Cependant Il crash avant d arriver dans le mail pour les dimensions de tableaux dont j ai besoin alors que ma ram unitilise est a priori suffisantes.
    Sur ma machine je peut donc allouer plus en utilisant variables globals que en passant par des new
    Déjà est tu sûr d'avoir besoin d'autant de mémoire? Que cherches-tu à faire exactement?

    L'avantage des news c'est que tu pourras allouer et désallouer selon tes besoins, ce n'est pas négligeable.
    De plus, les variables globales non constantes sont une très mauvaises idées.

    N'importe qui peut modifier cette variable et on ne sais pas qui la modifie et quand.
    Déjà ça va à l'encontre de tous les principes objets du C++ mais en plus, bonjour les dégâts si jamais tu es dans un contexte multithread.

    Même sans utiliser des threads, il sera très difficile de trouver une erreur provoquant une valeur incohérentes dans tes variables globales.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. passage de gros tableaux par adresse
    Par ol9245 dans le forum MATLAB
    Réponses: 7
    Dernier message: 10/10/2012, 11h51
  2. Gros tableaux chronologiques
    Par regdobey dans le forum C#
    Réponses: 2
    Dernier message: 20/07/2009, 21h04
  3. Gestion de gros tableaux
    Par DranDane dans le forum ASP.NET
    Réponses: 4
    Dernier message: 01/09/2008, 15h31
  4. Réponses: 1
    Dernier message: 06/08/2008, 09h35
  5. [Tableaux] Livre d'or gros problème
    Par mesdy dans le forum Langage
    Réponses: 8
    Dernier message: 08/05/2007, 16h46

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