forest123
Messages postés3Date d'inscriptionjeudi 9 juin 2005StatutMembreDernière intervention 4 décembre 2007
-
3 déc. 2007 à 17:34
forest123
Messages postés3Date d'inscriptionjeudi 9 juin 2005StatutMembreDernière intervention 4 décembre 2007
-
4 déc. 2007 à 12:03
Bonjour tous le monde,
En faite j'ai un code qui utilse un tableau de 4 dimesions (12*x*y*z), j'alloue ce tableau avec (un seul pointeur) un tableau physique d'une seule dimension et utilise un offset pour accedez comme un tableaux à quatre dimesion
define OFF4(a,i,j,k,A,I,J,K) ((((a)*(I)+(i))*(J)+(j))*(K)+(k)). bon rien de spécial
à partir d'une certaine taille : (592,712,492, 12) de float environ 5.5 Giga , l'allocation echoue pourtant j'ai 64 giga de ram, et si je utilise douze tableau de (592,712,492) ça marche , qlq peut m'expliquez pourquoi.
apparement il a pas un blocage dans l'allocation contigue à allouer ? je me trompe.
de plus j'ai une architecture à 64 bit
je suis sous linux redhat 64bit, avec gcc optin -mcpu=x86-64 est activé.
Merci d'avance
Ps : etre le meilleur oblige à croire qu'il y'a quelqu'un de meilleur.
nickydaquick
Messages postés416Date d'inscriptionvendredi 31 janvier 2003StatutMembreDernière intervention19 décembre 20133 3 déc. 2007 à 22:38
Salut , je viens de lire que tu alloues un bloc memoire de 5.5 Giga. Seulement a moins que je ne me trompe , malloc et calloc utilise des long, donc codes sur 4octets soit 32 bits. les longs etant signes ceci te laisse environ 32 bits non signes utilisables == environ 2Giga max d'allouables d'un seul coup.
J'espere avoir aider , Bonne chance
je suis heureux de faire partie d'une grande famille ...!
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 déc. 2007 à 23:55
malloc calloc etc. utilise size_t
Sous Windows:
Si tu es en 32 bit, size_t sera l'équivalent de unsigned int
Si tu es en 64 bit, size_t sera l'équivalent de unsigned __int64
gamemonde
Messages postés336Date d'inscriptionsamedi 9 août 2003StatutMembreDernière intervention 9 juillet 20112 4 déc. 2007 à 00:11
In Visual C++ 2005, malloc sets errno to ENOMEM if a memory allocation fails or if the amount of memory requested exceeds _HEAP_MAXREQ. For information on this and other error codes, see errno, _doserrno, _sys_errlist, and _sys_nerr.
donc verifie il a des fonctions pour agrandir la memoire possiblement utilisable
Vous n’avez pas trouvé la réponse que vous recherchez ?
forest123
Messages postés3Date d'inscriptionjeudi 9 juin 2005StatutMembreDernière intervention 4 décembre 2007 4 déc. 2007 à 11:40
Bonjour,
Merci pour vos réponses, le cout de la machine j'en pas la moindre idée mais je vous répoderais cette apres midi (t'es sur que tu veux le savoir ;-) ),
je suis entrain de chercher qlq equivalenet à _HEAP_MAXREQ pour agradir la memoire max alloué ,(merci gamemonde)
la réponse nickydaquick est intéressante, mais c'est le cas dans tous les systémes (ou presque ) ça serais impossible d'allouer plus de deux Giga avec malloc et calloc, non ?
ah, j'ai essayé aussi l'option -mcmodel=medium pour activer l'allocation plus de 2 Giga, je l'ai deja fait auparavant avec un autre programme et ça a marché. mais pas maintenant.
en faite je fait la partie du code concernée (divsion du tableau), mais ça me derrange qu'on sache pas pourquoi
A.Saad
Ps : etre le meilleur oblige à croire qu'il y'a quelqu'un de meilleur.