Allocation contigue

forest123 Messages postés 3 Date d'inscription jeudi 9 juin 2005 Statut Membre Dernière intervention 4 décembre 2007 - 3 déc. 2007 à 17:34
forest123 Messages postés 3 Date d'inscription jeudi 9 juin 2005 Statut Membre Derniè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.

6 réponses

nickydaquick Messages postés 416 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 19 décembre 2013 3
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 ...!
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
3 déc. 2007 à 22:43
environ 5.5 gig plutot que 2 mais que veux tu faire car allouer 5.5 gig c'est gros d'un coup et ta machine a couté combien avec 64 gig de ram
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
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

devrait être équivalent sous linux.

C++ (@++)<!--
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
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
0

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

Posez votre question
forest123 Messages postés 3 Date d'inscription jeudi 9 juin 2005 Statut Membre Derniè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.
0
forest123 Messages postés 3 Date d'inscription jeudi 9 juin 2005 Statut Membre Dernière intervention 4 décembre 2007
4 déc. 2007 à 12:03
re

assiez vous , voila le pris

20000 euros avec 8 processeur

Ps : etre le meilleur oblige à  croire qu'il y'a quelqu'un de meilleur.
0
Rejoignez-nous