Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de mémoire

8 réponses
Avatar
Markobar
Bonjour =E0 tous!

Je pourrais utiliser un vecteur tout simple car je sais la
taille, mais j'utilise une liste doublement cha=EEn=E9e parce que je dois
travailler avec beaucoup de donn=E9es (la taille du fichier texte qui
contient les donn=E9es est d'environ 20Mo). Je sais que le compilateur
que j'utilise est tr=E8s ancien (TurboC sous MS-DOS) mais il marche tr=E8s
bien... sauf qu'il a pas assez de m=E9moire pour les donn=E9es... m=EAme
avec la liste cha=EEn=E9e il plante.

Est-ce qu'il y a une solution pour r=E9soudre ce probl=E8me de
m=E9moire? Si non, quel compilateur peux-je utiliser pour =E9viter ce
probl=E8me (et ne pas changer tout le code!)? J'ai r=E9ussi =E0 tout mettre
dans MatLab par exemple, mais apr=E8s avoir tout chang=E9 (variables,
fonctions, etc...) il n'y a pas de probl=E8mes m=E9moire... mais il est
extr=EAmement lent!!! (m=EAme code: 10 secondes en TurboC, plus de 2
heures en MatLab)... c'es fou!

Merci de votre aide!!

8 réponses

Avatar
JKB
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.

Avatar
poulacou
On 7 mar, 02:14, Markobar wrote:
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 ...

Avatar
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?

Avatar
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/


--
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 }--

Avatar
Stephane Legras-Decussy
"Markobar" a écrit dans le message de news:

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....

Avatar
Charlie Gordon
"Thierry B." a écrit dans le message de news:

--{ 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


Avatar
Markobar

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.

Avatar
poulacou
On 7 mar, 11:06, Markobar wrote:
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.