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

wincpp Messages postés 24 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 9 septembre 2009 - 16 juin 2009 à 10:16
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 - 25 juin 2009 à 08:41
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

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
16 juin 2009 à 10:27
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
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
16 juin 2009 à 10:30
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.
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
16 juin 2009 à 10:31
oups je suis mal réveillé, [../auteur/PISTOLPETE/352018.aspx Pistol_Pete]en parle déjà
0
wincpp Messages postés 24 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 9 septembre 2009
24 juin 2009 à 17:44
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
25 juin 2009 à 08:41
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
0
Rejoignez-nous