comment augmenter la taille du heap ?

comment augmenter la taille du heap ? - C - Programmation

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

Reply

Marsh Posté le 06-03-2006 à 22:26:28   

Reply

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 ?

Reply

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 :D (bon par contre si tu remplis les blocs alloués c est moins forcemment)
t es sous DOS ?

Reply

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

Reply

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 :D (bon par contre si tu remplis les blocs alloués c est moins forcemment)
t es sous DOS ?


 
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

Reply

Marsh Posté le 06-03-2006 à 23:23:30    

DOS et 40Mo de global ? :D
 
et sinon les allocations mémoires, c'est pas possible ?

Reply

Marsh Posté le 06-03-2006 à 23:37:10    

bjone a écrit :

DOS et 40Mo de global ? :D


hein ... ?
 
sinon pour l'allocatoin de mémoire, c'est avant le main, y marchent pas les malloc, si ?

Reply

Marsh Posté le 06-03-2006 à 23:37:32    

oui, fais une allocation dynamique

Reply

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.

Reply

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.
 

Reply

Marsh Posté le 11-03-2006 à 18:25:59   

Reply

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

Reply

Marsh Posté le 11-03-2006 à 21:32:35    

ok,merci, dans "32-bit Image" c'est ça ?

Reply

Marsh Posté le 12-03-2006 à 11:28:33    

Je sais pas, vois la doc!

Reply

Marsh 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

Reply

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
 
fais un malloc


 
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.

Reply

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.

Reply

Marsh Posté le 15-03-2006 à 10:34:54    

merci pour ces précisions. 4 Go (ou un peu moins) ça va comme limite ...

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed