comment augmenter la taille du heap ? - C - Programmation
Marsh Posté le 06-03-2006 à 22:38:03
on ne peut pas 'déclarer' de variable sur le tas, une variable en c est soit lexicale soit globale, par contre on peut allouer de la mémoire sur le tas (*alloc, free)
tu peux montrer ton code ?
Marsh Posté le 06-03-2006 à 22:43:47
il faut que ton os gere la memoire virtuelle, genre sous linux tu peux allouer 257Mo avec 256Mo de RAM (bon par contre si tu remplis les blocs alloués c est moins forcemment)
t es sous DOS ?
Marsh Posté le 06-03-2006 à 22:53:23
oui je parlais de variables globales (tableaux de structures, etc ...) déclarées avant le main, elles sont bien dans le heap ? là j'ai pas le prg en question sous la main (au taf), mais le problème concerne juste la déclaration de 3 tableaux de structures qui pèsent environ 40 Mo.
lorsque je lance le "build" du projet, y veut pas en disant comment je peux étendre un tas de vapeur (how can you expand a vapor heap ?), il parle de lmem.c et il veut pas compiler.
quand je réduis la taille des tableaux ça passe sans problème.
de quoi s'agit-il ... ?
Marsh Posté le 06-03-2006 à 22:55:57
manatane a écrit : il faut que ton os gere la memoire virtuelle, genre sous linux tu peux allouer 257Mo avec 256Mo de RAM (bon par contre si tu remplis les blocs alloués c est moins forcemment) |
j'ai mis 2h30 à écrire mon message précédent, du coup ...
tu déconnes avec le coup du DOS ... ? ou alors tu parles du DOS de windows XP, ce que j'utilise au boulot là où j'ai le problème
Marsh Posté le 06-03-2006 à 23:23:30
ReplyMarsh Posté le 06-03-2006 à 23:37:10
bjone a écrit : DOS et 40Mo de global ? |
hein ... ?
sinon pour l'allocatoin de mémoire, c'est avant le main, y marchent pas les malloc, si ?
Marsh Posté le 07-03-2006 à 21:42:38
manu a écrit : sinon pour l'allocatoin de mémoire, c'est avant le main, y marchent pas les malloc, si ? |
Non, evidemment. Tes variables globales doivent etre des pointeurs, et tu alloues la memoire dans une routine d'initialisation appelee au debut de ton programme.
Marsh Posté le 11-03-2006 à 18:25:59
ok c'est bon ça marche avec malloc, j'avais jamais eu besoin de trop de mémoire (je fais des interfaces entre applis par fichiers textes) donc j'avais la flemme de me pencher sur l'utilisation de la mémoire et je n'utilisais que des variables (locales et globales) sans allocation dynamique de la mémoire.
skelter, je croyais que les variables globales étaient prises sur le heap à cause du message quand je déclarais un trop gros tableau en variable globale : "how can you expand a vapor heap ?" puis quelque chose comme "error in LMEM.C".
merci à tous.
Marsh Posté le 11-03-2006 à 19:58:00
Bon en fait,
tu avais besoin d'allouer dynamiquement de la memoire, mais sinon pour repondre à ta question initiale, modifier la taille du "tas", c'est dans les options du linker que ca se passe...
Marsh Posté le 11-03-2006 à 21:32:35
ReplyMarsh Posté le 12-03-2006 à 12:14:20
manu a écrit : ok,merci, dans "32-bit Image" c'est ça ? |
mais c'est n'importe quoi, ton probleme n'a rien à voir avec la taille du tas (qui à priori n'est pas limité), tu croyais que tes 40mo en globale étaient alloués sur le tas
fais un malloc
Marsh Posté le 12-03-2006 à 15:21:08
skelter a écrit : mais c'est n'importe quoi, ton probleme n'a rien à voir avec la taille du tas (qui à priori n'est pas limité), tu croyais que tes 40mo en globale étaient alloués sur le tas |
oui je sais, c'est ce que j'ai mis un peu plus haut, j'utilise maintenant malloc.
et effectivement la taille du tas ne semble pas limitée, je viens d'allouer 1Go sans problème pour tester.
Marsh Posté le 13-03-2006 à 16:31:40
Si, la taille du tas est limitee. En 32 bits tu ne peux adresser que 4GB, et le tas fais donc forcement moins de 4GB. En pratique la taille maximale est meme inferieur, puisque tu dois aussi pouvoir adresser ton propre texte, ta stack, tes donnees, le texte du kernel, le texte et les donnees des libs... Par exemple sur AIX, le heap est limite a 3.25GB pour une appli 32 bits.
Marsh Posté le 15-03-2006 à 10:34:54
merci pour ces précisions. 4 Go (ou un peu moins) ça va comme limite ...
Marsh Posté le 15-03-2006 à 20:35:46
2Go sous Windows, 3Go sous Linux, et je crois 4Go sous Win64 (pour un process Win32 bien évidemment).
Marsh Posté le 06-03-2006 à 22:26:28
bonjour, question un peu con j'ai l'impression mais je trouve pas la réponse : est-ce qu'on peut augmenter la taille du tas et si oui comment ? j'utilise borland 5.02.
j'arrive pas à déclarer plus de 40 Mo de variables environ dans le heap.
merci pour toute contribution à ma cause désespérée ...