Problème de mémoire

Le
Markobar
Bonjour à tous!

Je pourrais utiliser un vecteur tout simple car je sais la
taille, mais j'utilise une liste doublement chaînée parce que je dois
travailler avec beaucoup de données (la taille du fichier texte qui
contient les données est d'environ 20Mo). Je sais que le compilateur
que j'utilise est très ancien (TurboC sous MS-DOS) mais il marche très
bien sauf qu'il a pas assez de mémoire pour les données même
avec la liste chaînée il plante.

Est-ce qu'il y a une solution pour résoudre ce problème de
mémoire? Si non, quel compilateur peux-je utiliser pour éviter ce
problème (et ne pas changer tout le code!)? J'ai réussi à tout mettre
dans MatLab par exemple, mais après avoir tout changé (variables,
fonctions, etc) il n'y a pas de problèmes mémoire mais il est
extrêmement lent!!! (même code: 10 secondes en TurboC, plus de 2
heures en MatLab) c'es fou!

Merci de votre aide!!
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JKB
Le #1250659
Le 07-03-2008, à propos de
Problème de mémoire,
Markobar écrivait dans fr.comp.lang.c :
Bonjour à tous!


Bonjour,

Je pourrais utiliser un vecteur tout simple car je sais la
taille, mais j'utilise une liste doublement chaînée parce que je dois
travailler avec beaucoup de données (la taille du fichier texte qui
contient les données est d'environ 20Mo). Je sais que le compilateur
que j'utilise est très ancien (TurboC sous MS-DOS) mais il marche très
bien... sauf qu'il a pas assez de mémoire pour les données... même
avec la liste chaînée il plante.

Est-ce qu'il y a une solution pour résoudre ce problème de
mémoire? Si non, quel compilateur peux-je utiliser pour éviter ce
problème (et ne pas changer tout le code!)? J'ai réussi à tout mettre
dans MatLab par exemple, mais après avoir tout changé (variables,
fonctions, etc...) il n'y a pas de problèmes mémoire... mais il est
extrêmement lent!!! (même code: 10 secondes en TurboC, plus de 2
heures en MatLab)... c'es fou!


Une idée, comme ça... Utiliser un OS digne de ce nom et un compilo
décent ? Avec un peu de chance, il y a une version de gcc qui tourne
directement sous Windows. Par ailleurs, le TC est buggué jusqu'à la
moëlle lorsqu'on essaye d'utiliser les modèles mémoire huge et large
(de mémoire pour les noms) et certains résultats sont
catastrophiques (repliement mémoire). Je m'en suis rendu compte à
l'époque en faisant tourner des codes de divisions de polynomes sur
des corps de Galois. Je dois même encore avoir les exemples de code
provoquant des erreurs sur des disquettes...

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.

poulacou
Le #1250658
On 7 mar, 02:14, Markobar
Bonjour à tous!

Je pourrais utiliser un vecteur tout simple car je sais la
taille, mais j'utilise une liste doublement chaînée parce que je dois
travailler avec beaucoup de données (la taille du fichier texte qui
contient les données est d'environ 20Mo). Je sais que le compilateur
que j'utilise est très ancien (TurboC sous MS-DOS) mais il marche très
bien... sauf qu'il a pas assez de mémoire pour les données... même
avec la liste chaînée il plante.

Est-ce qu'il y a une solution pour résoudre ce problème de
mémoire? Si non, quel compilateur peux-je utiliser pour éviter ce
problème (et ne pas changer tout le code!)? J'ai réussi à tout mettr e
dans MatLab par exemple, mais après avoir tout changé (variables,
fonctions, etc...) il n'y a pas de problèmes mémoire... mais il est
extrêmement lent!!! (même code: 10 secondes en TurboC, plus de 2
heures en MatLab)... c'es fou!

Merci de votre aide!!


Tu alloues bien ton vecteur en dynamique ??

allocation dynamique : tu utilises la mémoire dans le tas ( fonction
de la ram de ta machine)
sinon tu alloueras dans la pile et la la tu es vraiment limité en
taille ...

Markobar
Le #1251281
Tu alloues bien ton vecteur en dynamique ??

allocation dynamique : tu utilises la mémoire dans le tas ( fonction
de la ram de ta machine)
sinon tu alloueras dans la pile et la la tu es vraiment limité en
taille ...


Ce que je fais c'est un malloc de la taille des données à
enregistrer à chaque fois. C'est comme ça qu'il faut allouer, n'est-ce
pas?

Thierry B.
Le #1256533
--{ Markobar a plopé ceci: }--

Je pourrais utiliser un vecteur tout simple car je sais la
taille, mais j'utilise une liste doublement chaînée parce que je dois
travailler avec beaucoup de données (la taille du fichier texte qui
contient les données est d'environ 20Mo). Je sais que le compilateur
que j'utilise est très ancien (TurboC sous MS-DOS) mais il marche très


Essayer avec Djgpp, de mémoire http://www.delorie.com/


--
Il y a des bégonias dans la cheminée de Marcel.
Je répète, il y a des bégonias dans la cheminée de Marcel.
--{ fr.misc.divers }--

Stephane Legras-Decussy
Le #1257750
"Markobar"
Ce que je fais c'est un malloc de la taille des données à
enregistrer à chaque fois. C'est comme ça qu'il faut allouer, n'est-ce
pas?


avec turbo C il y avait farmalloc( ) pour les gros objets...
tu testes si le pointeur renvoyé est NULL avant de t'en servir ?

de toute façon c'est pas standard et périmé...

telecharge code::blocks et tout fonctionnera
comme il faut....

Charlie Gordon
Le #1267192
"Thierry B."
--{ Markobar a plopé ceci: }--

Je pourrais utiliser un vecteur tout simple car je sais la
taille, mais j'utilise une liste doublement chaînée parce que je dois
travailler avec beaucoup de données (la taille du fichier texte qui
contient les données est d'environ 20Mo). Je sais que le compilateur
que j'utilise est très ancien (TurboC sous MS-DOS) mais il marche très


Essayer avec Djgpp, de mémoire http://www.delorie.com/


www.cygwin.com

--
Chqrlie


Markobar
Le #1327816

avec turbo C il y avait farmalloc( ) pour les gros objets...
tu testes si le pointeur renvoyé est NULL avant de t'en servir ?

de toute façon c'est pas standard et périmé...

telecharge code::blocks et tout fonctionnera
comme il faut....


Merci beaucoup pour vos infos!! Je crois qu'avec code::blocks je vais
m'en sortir.

poulacou
Le #1328971
On 7 mar, 11:06, Markobar
Tu alloues bien ton vecteur en dynamique ??

allocation dynamique : tu utilises la mémoire dans le tas ( fonction
de la ram de ta machine)
sinon tu alloueras dans la pile et la la tu es vraiment limité en
taille ...


Ce que je fais c'est un malloc de la taille des données à
enregistrer à chaque fois. C'est comme ça qu'il faut allouer, n'est-ce
pas?


oui et tester la valeur de retour de pointeur pour savoir si
l'allocation c'est bien passé : TRES IMPORTANT
et si liste doublement chainées, pour chaque chaine tu as une
allocation.


Publicité
Poster une réponse
Anonyme