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 :

Probleme de taille de tableau


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 50
    Par défaut Probleme de taille de tableau
    Bonjour,

    Y a -t-il une taille limite a ne pas depasser pour les tableaux ?... Par exemple pour un tableau de "Double", je ne peux pas dépasser 1000 elements, sinon il y a un message d'erreur à l'exécution du programme...
    Peut-être que ma RAM est trop juste, mais je doute que ce soit l'unique raison du bug ...

    Y aurait-il une limitation due au C++, qui limite par exemple à 1000 nombres de type "double" la taille des tableaux ?

    Je vous remercie de votre aide...
    @+...

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    ça dépend essentiellement de la taille de la pile (pour les variables automatiques) ou du tas (pour les allocations dynamiques).

    Pour les grosses allocations, il vaut mieux passer par l'allocation dynamique (new/delete) et en cas de problème une exception de type bad_alloc est levée.

    Après il doit exister une limitation au niveau de l'indice du tableau (entier signé).

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 50
    Par défaut
    Merci pour ta reponse,
    @+...

  4. #4
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    ?

  5. #5
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Peut-être que ma RAM est trop juste, mais je doute que ce soit l'unique raison du bug ...
    Y aurait-il une limitation due au C++, qui limite par exemple à 1000 nombres de type "double" la taille des tableaux ?
    Ce n'est pas forcément la RAM qui est trop juste mais la grandeur de ton bloc que tu désires allouer qui peut être trop important...L'allocation mémoire s'effectue selon une zone contigüe disponible.
    De ce fait, il est surement probable que tu puisses encore allouer des blocs de plus petites tailles, voir qui sait un tableau de 1000 doubles.

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    c'est bizarre... 1000 doubles, c'est quand meme pas la mort...
    Ca bloque à 1000 pile?
    meme avec new?

  7. #7
    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,

    Le probleme vient du terme "contigue", que ce soit pour un tableau statique ou pour un tableau dynamique...

    En effet que tu écrive un code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    double tab[1000];
    ou
    double *tab=new double[1000];
    le résultat sur l'espace mémoire contigu nécessaire est strictement le meme: il faut 1000 fois la taille pour placer un double (disons, meme si cela peut varier, 80bits) contigus

    Si le système ne trouve pas un endroits où il puisse placer les (d'apres l'exemple) 80.000 bits, à cause de tout ce qui peut tourner sur le système, et qui prend de la place en mémoire, le programme "plantera" de manière systématique

    Par contre, ce n'est pas parce que le système n'arrive pas à trouver les 80.000 bits contigus en mémoire, qu'il n'est pas capable de fournir 1000 fois 80 bits non contigus

    L'astuce, pour permettre de mettre ces 1000 fois 80 bits "physiquement" séparés en relation entre eux, c'est qu'il faudra sans doute se baser sur une structure (un peu) plus compliquée, de pile, de file, de liste ou d'arbre binaire, selon l'utilisation que tu prévois de tes doubles...

    Les conteneurs de la STL que sont list, dequeue,(multi)map,(multi)set et autres (tous, à l'exception de vector, il me semble) doivent pouvoir te venir en aide
    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

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    o_O
    Pile et tas n'ont absolument pas la même capacité. De plus la saturation de la pile provoque un arrêt brutal non esquivable, la saturation du tas une exception rattrapable.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    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
    Bien que cela puisse preter à confusion, quand je parle de pile ou de file, c'est à comprendre comme les structures algorithmiques que cela représente:

    un système LIFO pour une pile et FIFO dans le cadre d'une file, sans envisager le tri des données introduites
    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

  10. #10
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Je faisais allusion à ceci.
    Citation Envoyé par koala01
    Le probleme vient du terme "contigue", que ce soit pour un tableau statique ou pour un tableau dynamique...

    En effet que tu écrive un code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    double tab[1000];
    ou
    double *tab=new double[1000];
    le résultat sur l'espace mémoire contigu nécessaire est strictement le meme: il faut 1000 fois la taille pour placer un double (disons, meme si cela peut varier, 80bits) contigus

    Si le système ne trouve pas un endroits où il puisse placer les (d'apres l'exemple) 80.000 bits, à cause de tout ce qui peut tourner sur le système, et qui prend de la place en mémoire, le programme "plantera" de manière systématique
    Ce n'est pas le même espace mémoire qui est utilisé. Pile dans un cas, et tas dans l'autre. Hors pile et tas ne sont absolument pas traités de la même façon. Limites différentes (sans communes mesures en fait). Conséquences d'indisponibilité différentes.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #11
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    J'ai de bonnes notions de ce qu'est une pile, par contre je ne sais pas du tout ce qu'est le tas????
    La pile, c'est pour les sauvegardes de registre, et le tas???

    Merci pour ces quelques éclaircissements!

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    La pile, c'est pour les sauvegardes de registre et les variables locales non-statiques (le terme, jamais employé, est "automatique", d'où le modifieur "auto" qui est de même type que "static" ou "register").

    Le tas, c'est la zone mémoire d'allocation dynamique (là où tapent new et malloc())

    La Zone de Données, c'est là où l'on trouve les variables statiques (variables locales static ou variables globales).
    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. probleme taille de tableau
    Par Ganondorf dans le forum Débuter
    Réponses: 2
    Dernier message: 25/10/2010, 16h01
  2. Tableau C probleme de taille
    Par TeKaBloK dans le forum C
    Réponses: 4
    Dernier message: 15/11/2006, 20h59
  3. [HTML]Probleme de taille d'un input (dans un tableau)
    Par Shinji69 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 27/04/2006, 12h11
  4. probleme de taille de title bar
    Par Daniel Spring dans le forum C++Builder
    Réponses: 1
    Dernier message: 15/11/2004, 17h26
  5. [Memo] Probleme de taille...
    Par NoisetteProd dans le forum Composants VCL
    Réponses: 2
    Dernier message: 27/08/2003, 11h42

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