Tableau à 3 dimensions = erreur size of variable is too large - comment éviter ?

Signaler
Messages postés
24
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
9 septembre 2009
-
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
-
Salut à tous.

Voilà j'ai un problème quand je veux allouer un tableau à 3 dimensions du genre

int tableau[1024][768][1000];

Mon compilateur DevC++ me dit: "size of variable 'tableau' is too large ".
Je sais c'est énorme mais je veux comme ça et pas autrement.

Je voudrais savoir comment faire pour qu'il m'autorise à créer une variable de cette taille là ou si il y a un autre moyen (pas top compliqué) pour créer un tableau 3D.

D'avance merci.

5 réponses

Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Salut
Une simple analyse  donne 1000*1024*768*sizeof(int) = 3 Giga octets !!

En 32 bits c'est impossible il faut que tu achètes un ordi 64 bits avec plein de ram.

En tout cas, j'espère que tu ne veux pas stocker tout cela dans la pile... Cela serait de la pure folie!
Regarde du coté de l'allocation dynamique...

Donne nous la raison pour laquelle tu veux toute cette place, on pourra surement d'aider à réduire l'espace mémoire utilisé.
A+

____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
3Go est impossible même en 64bit, de cette façon : allocation statique.

Tu vas etre obligé de passer par malloc pour allocation dynamique. Sinon, Windows comme Linux, vont t'hurler dessus parce que la taille de la pile sera énorme.
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
oups je suis mal réveillé, [../auteur/PISTOLPETE/352018.aspx Pistol_Pete]en parle déjà
Messages postés
24
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
9 septembre 2009

J'avoue que vouloir stocker 3Go dans 1 seul c'est un peu chaud ! En fait je veux pouvoir stocker les diffèrentes valeurs RGB de chaque pixel d'une image pour après y appliquer des masques. Pourquoi ? Ba parce que j'ai remarqué que lorsque j'actualise l'affichage de mon image cela va plus vite en lisant dans la RAM que sur le HDD. C'est surtout pour la vitesse de lecture et pour éviter de fragmenter mon HDD que je veux tout stocker en mémoire. Moi question allocation je connais les "new int" "delete ..." "..." "..." mais je maîtrise pas encore alors pour que j'utilise les mallocs c'est un peu mort.
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
Vouloir faire du traitement de l'image sans maitriser l'allocation dynamique est suicidaire...
C'est facile, au lieu de faire:
 int tableau[1024][768][1000];
tu fais int *tableau = new int[1024*768*1000];

Pour ton problème, ne pourrais -tu pas te contenter d'ouvrir deux, trois images à la fois
Regarde ce que fait la visionneuse windows; Lorsque tu regardes une photo, en arrière plan, elle charge la photo suivante...

Regarde ici : http://ImAnalyse.free.fr, tu trouveras un logiciel open source en taitement de l'image
A+.
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr