Problèmes d'allocation en C

Fermé
manu - 1 sept. 2003 à 13:03
 tomtom - 2 sept. 2003 à 17:27
Salut,

Je travaille sous linux en langage C. J'ai un problème lorsque j'essaye d'allouer une variable de plus de 850Mo ou bien lorsque je la déclare en variable globale j'ai le même résultat : "seg fault". Par contre je peux declarer 2 variables de 600Mo sans problèmes! Est ce que qqun pourrais me dire s'il existe une option dans gcc pour modifier la taille max d'une variable ou bien s'il faut modifier des headers puis recompiler le noyau ou autre chose.

merci de votre aide!

4 réponses

Allouer une variable de 850Mo C trop :o
C pq faire ? Il est pas possible de passer par des buffers + petits ? (Imagine ke le gars chez ki tournera l'appli aura besoin de plus de 850Mo de mémoire (RAM+SWAP) ce ki est non négligeable)

@+
0
C'est le cas!!! c'est un algo de programmation linéaire ( simplex), en fait je dispose de 8Go de RAM. pour l'algorithme du simplex, j'ai absolument besoin du tableau qui doit pouvoir dépasser les 850 Mo. Si tu as une solution je suis preneur!!!

@+
0
Non je ne peux pas t'aider +
mais le system à surement une limite pour l'allocation d'un bloc mémoire
0
Salut,

C'est peut etre un pb du compilo ou tout simplement de l'os. Dans ce cas je ne sait pas comment faire.

De toute facon si tu sais que tu as un tel tableau je te conseil de fragmenter ton tableau. En fait quant tu essaye d'allouer ton tableau de 850 Mo il esssaye de trouver 850 Mo CONTIGUE de libre et meme si tu a 8 Go de memoire et 7 Go de libre ce n'est pas gagner.

Une solution simple est de passer par un adressage indirect. Au lieu de faire un tableau de structures en brute tu fait un tableau de pointeurs sur tes structures. Avant d'avoir un tableau de pointeurs de 100 Mo ya de quoi voir venir. Apres un calcul rapide ca doit faire plus de 26 millions de pointeurs.

Si c'est deja un tableau de pointeurs ou d'une petite structure. Ya une autre facon : c'est de fractionner ton tabeau a la main. Il faut creer une structure avec des fonctions d'acces.

voila
0
En fait j'avais pensé à cette idée. Mais en fait je passerai d'un tableau d'entier à un tableau de pointeur et je pense que les temps de calculs seraient beaucoup plus longs. Mais si je ne trouve pas je serai obligé de faire comme ça.

merci
0
Salut

En ce moment c'est un tableau d'entiers de 850 Mo ??!!

Pour info un acces indirect n'est pas BEAUCOUP plus long en particulier par pointeur.

Si remplace ton tableau par un tableau de tableau pour le fractionner (ce n'est qu'un exemple) et que tu choisi des dimensions du genre 10024 tu peux faire des acces tres performants en manipulant directement bit a bit. mais je ne developpe pas plus je penses que tu y a penser.

bon courage
0