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 :

Déclarer un (très) grand tableau?


Sujet :

C++

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Déclarer un (très) grand tableau?
    Salut!

    Je développe une application qui utilise un tableau de taille 100*100*100 (triple dimension donc).
    Le problème est que j'ai besoin d'un deuxième tableau de même taille, mais quand j'essaye de le déclarer l'application plante.
    De même, si j'essaye de déclarer mon premier tableau de taille 110*110*110 (sans déclarer le deuxième cette fois), même plantage de l'application.

    J'en arrive à la conclusion que le système ne m'alloue pas assez de mémoire peut-être? C'est des tableaux de bool, donc 1 octet par élément, ce qui m'amène à une taille maximale de 1Mo en mémoire, dès que j'en veux plus ça foire.

    Est-il possible de réserver plus de mémoire pour mon application? Ou peut-être utiliser malloc pour déclarer mes tableaux(est-ce que ça me permettrait d'avoir des tableaux de plus grande taille?).

    Je suis ouvert à toute proposition. merci d'avance.

  2. #2
    Membre régulier Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Points : 123
    Points
    123
    Par défaut
    montr nous ton code s'il te plait !

    j'ai eu ce probleme une fois et je croyais que ça venais d'un probleme de mémoire.
    en réalité c'était une erreur de programmation...

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    La pile a une taille limitée, il faut utiliser un tableau dynamique.

    Pour l'allocation dynamique oublie malloc, garde new dans un coin de ta tête, et fonce sur les vector. Enfin pour du tridimensionnel ce ne sera peut-être pas génialement pratique, à la limite il faudrait voir si des bibliothèques ne proposent pas mieux (boost::multi_array ?)

    http://c.developpez.com/faq/cpp/?page=STL#STL_vector

  4. #4
    Membre émérite
    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 : 44
    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
    Points : 2 568
    Points
    2 568
    Par défaut
    J'ai fait des tableaux 3D plus gros que cela et bien plus qu'un seul dans la même appli.
    Peut être qu'il y a un débordement d'accès d'un de tes pointeurs.

    Et comme hamster... cela m'est déjà arrivé mais c'est toujours un problème de programmation, enfin quasi....

    Tableau de tableau c pas top pour la rapidité, enfin cela dépend comment tu traites tes données, mais sur un parcourt de chaque élément de la structure 3D, le mieux c'est quand même un bon vieux tableau 1D

  5. #5
    Membre régulier Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Points : 123
    Points
    123
    Par défaut
    oui je bossais avec 4 ou 5 tableaux d'environs 400000 char, et après avoir réfléchi, c'était pas un problème de mémoire venant de la bécane à proprement parlé mais bien un problème de prog venant de ma part

  6. #6
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bon j'ai fais un petit test simple, j'ai créé un nouveau projet (sous VS 6.0) avec juste un fichier et une fonction main, mais en déclarant le tableau à des endrois différents:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    bool tab[200][200][200];
     
    int main(int argc, char **argv) 
    {
    	for(int i = 0; i < 200; i++)
    		for(int j = 0; j < 200; j++)
    			for(int k = 0; k < 200; k++)
    				tab[i][j][k] = false;
     
    	return 0;
    }
    Marche parfaitement.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main(int argc, char **argv) 
    {
    	bool tab[200][200][200];
     
    	for(int i = 0; i < 200; i++)
    		for(int j = 0; j < 200; j++)
    			for(int k = 0; k < 200; k++)
    				tab[i][j][k] = false;
     
    	return 0;
    }
    Plante à l'exécution.

    Apparemment je peux déclarer un "gros" tableau à l'avance, mais pas dans une fonction.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Les variables globales ne sont pas stockées sur la pile, tu disposes donc de plus de mémoire dans le premier cas.

  8. #8
    Membre émérite
    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 : 44
    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
    Points : 2 568
    Points
    2 568
    Par défaut
    Comme loulou24 utilise des new

  9. #9
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bon alors tout s'explique, je devrai utiliser des variables globales (et tant pis si ça fait moins "propore" dans un programme OO, ça va me simplifier grandement la vie).

    Merci pour l'aide.

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

Discussions similaires

  1. Insérer un très (mais vraiment très) grand tableau
    Par ANOVA dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 6
    Dernier message: 30/08/2010, 20h43
  2. Réponses: 4
    Dernier message: 01/05/2009, 19h54
  3. dessiner un très grand tableau + optimisation en temps
    Par identifiant_bidon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 18/01/2008, 10h15
  4. [SELECT sur 16 millions de lignes] délai très grand
    Par localhost dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/11/2004, 17h04
  5. Une unité pour gérer des très grands nombres
    Par M.Dlb dans le forum Langage
    Réponses: 2
    Dernier message: 09/09/2003, 12h07

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