gestion de la mémoire ?

gestion de la mémoire ? - C++ - Programmation

Marsh Posté le 10-07-2002 à 15:45:49    

cet année j'ai étudié le c (ansi) a la fac, et ils arrétait pas de nous dire de bien désallouer la mémoire à la fin de l'execution.
 
la je voudrai faire un ptit programme qui utilisent des piles assez grosses (1500 éléments, voire plus). la désallocation est-elle conseillée ou je m'en tape ?

Reply

Marsh Posté le 10-07-2002 à 15:45:49   

Reply

Marsh Posté le 10-07-2002 à 15:49:53    

tu dois désallouer tout ce que tu alloues.

Reply

Marsh Posté le 10-07-2002 à 15:50:25    

youdontcare a écrit a écrit :

tu dois désallouer tout ce que tu alloues.




sinon ?   :??: :D

Reply

Marsh Posté le 10-07-2002 à 15:51:23    

Sinon elle est pas désallouée...
 
(a question con, ...)
 
Edit:
Apres reflexion, c'est pas mal les garbage collectors et compteurs de références de tout poil. Ca limite la casse en milieu boulay.


Message édité par lorill le 10-07-2002 à 15:57:28
Reply

Marsh Posté le 10-07-2002 à 16:04:34    

mais qu'est-ce qu'on risque a ne pas désallouer la mémoire, parce que les profs de fac, y sont pas capables d'y répondre, mais y nous font désallouer

Reply

Marsh Posté le 10-07-2002 à 16:06:57    

C'est simple, quand tu ne désalloues pas ta mémoire, ton programme grossit au fur et à mesure de son exécution, ce qui est relativement embêtant, non ?

Reply

Marsh Posté le 10-07-2002 à 16:07:47    

Ben la mémoire n'est pas libérée, c'est tout. Le problème c'est que selon le systeme ou si le process se ferme mal, la mémoire n'est pas forcément réutilisables pour les autres programmes.  
 
Je suis sur que t'es pas le dernier a raler quand un jeu bouffe toute ta ram et ne t'en rends que la moitié, si ?
Ben voila, tu as ta réponse.

Reply

Marsh Posté le 10-07-2002 à 16:15:04    

oue si tu la desalloues pas toi meme c'est ton OS qui va devoir le faire (+ ou - bien)
pis si tu le fais pas -> programmation de porci :D po bien


Message édité par evr le 10-07-2002 à 16:15:47
Reply

Marsh Posté le 10-07-2002 à 16:23:07    

merci pour les réponses  :)  
(et vive l'ada  :D )

Reply

Marsh Posté le 10-07-2002 à 16:26:34    

xav14 a écrit a écrit :

mais qu'est-ce qu'on risque a ne pas désallouer la mémoire, parce que les profs de fac, y sont pas capables d'y répondre, mais y nous font désallouer




c'est quand même énorme ça....  :ouch:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 10-07-2002 à 16:26:34   

Reply

Marsh Posté le 10-07-2002 à 17:12:48    

xav14 a écrit a écrit :

mais qu'est-ce qu'on risque a ne pas désallouer la mémoire, parce que les profs de fac, y sont pas capables d'y répondre, mais y nous font désallouer




 
si tu desalloues pas, je ne t'embaucherai
pas comme programmeur :).
 
Les cas:  
- le plus simple (pour toi) : tu ne desalloues pas et il ne se passe rien.
- le plus general: tu programmes une appli, tu programmes comme un porc sans désallouer ou en désallouant de maniere aléatoire. Tu as une appli qui gonfle au fur et a mesure de son utilisation, ou bien qui plante sans prevenir.
- le pire: en plus de desallouer ta memoire, tu dois désallouer certaines ressources critiques qui pour des raisons X ou Y ne sont pas gérées automatiquement par le systeme d'exploitation. Au final, quand on utilise ton application on a regulierement des ecrans bleus (sous windows).
 
Je t'accorde que parfois les programmeurs essaient de bien coder mais ca devient tellement compliqué ces problemes
de gestion de memoire surtout quand on recupere du code existant..
 
LeGreg

Reply

Marsh Posté le 10-07-2002 à 20:41:30    

Harkonnen a écrit a écrit :

 
c'est quand même énorme ça....  :ouch:  




 
mouais
des fois y zont pas envies aussi  :D

Reply

Marsh Posté le 10-07-2002 à 21:28:30    

xav14 a écrit a écrit :

 
 
mouais
des fois y zont pas envies aussi  :D  




 
Des fois, ils sont pas capables

Reply

Marsh Posté le 11-07-2002 à 16:57:52    

C'est surtout une bonne habitude à prendre.
Si tu ne désalloue pas, l'OS le fera pour toi tout de même et dans la grande majorité des cas, ça ne changera rien de ne pas le faire.
Mais en prenant l'habitude de le faire tout le temps, tu te met à l'abri des rares cas ou cela pourra te poser problème. Car en informatique, si un problème a très peu de chance de se produire, alors il se produira. Et ce jour là, tu vas galérer.
C'est de la programmation propre, c'est tout.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 11-07-2002 à 17:29:21    

HelloWorld a écrit a écrit :

Si tu ne désalloue pas, l'OS le fera pour toi tout de même et dans la grande majorité des cas, ça ne changera rien de ne pas le faire.



 :heink:  
Ca dépend l'OS à mon avis... Je doute fort que ME soit aussi balaise pour désallouer que 2000/XP, et même ces derniers ont tendance à patiner dans la semoule en cas de non désallocation de grosse zone mémoire.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 12-07-2002 à 00:53:48    

1)Si tu n'arrives pas a désallouer correctement, c'est que ton programme est mal structuré.
 
2)Si tu ne désalloue pas, ton programme prends trop/de+ en + de mémoire, et tourne moins bien, et ça ne rends service ni à  l'utilisateur ni à toi.
Et il n'est pas certain que la mémoire soit quand même libérée par l'OS à la fin de l'exécution.
 
3)Si tu alloues avec new, tes objets ne seront jamais détruits.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 12-07-2002 à 01:24:29    

xav14 a écrit a écrit :

 
mouais
des fois y zont pas envies aussi  :D  




 
Bas la plus part du temps les pauvres on déjà a composer avec des élèves qui n'on que trés rarement approché un ordinateur, alors il on autre chose a foutre que de repondre au question existantiel du pourquoi du comment des principes de programation avec ce qui arrive a faire quelque chose qui tourne.

Reply

Marsh Posté le 12-07-2002 à 16:54:33    

Ca dépend l'OS à mon avis... Je doute fort que ME soit aussi balaise pour désallouer que 2000/XP, et même ces derniers ont tendance à patiner dans la semoule en cas de non désallocation de grosse zone mémoire.
 
En C par exemple, si tu utilises malloc, tu utilises en fait la librairie CRT (C Run Time) qui fait des VirtualAlloc de L'OS.
Lorsque tu fais return de main(), la lib désalloue tout ce que tu n'a pas toi même desalloue, et une fois que le programme se termine, Windows desalloue ce que la lib n'aurait pas desallouer ...
Nan, je pense que desallouer la memoire est bien supporte par les OS, y compris WinME.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 12-07-2002 à 17:15:10    

HelloWorld a écrit a écrit :

Ca dépend l'OS à mon avis... Je doute fort que ME soit aussi balaise pour désallouer que 2000/XP, et même ces derniers ont tendance à patiner dans la semoule en cas de non désallocation de grosse zone mémoire.
 
En C par exemple, si tu utilises malloc, tu utilises en fait la librairie CRT (C Run Time) qui fait des VirtualAlloc de L'OS.
Lorsque tu fais return de main(), la lib désalloue tout ce que tu n'a pas toi même desalloue, et une fois que le programme se termine, Windows desalloue ce que la lib n'aurait pas desallouer ...
Nan, je pense que desallouer la memoire est bien supporte par les OS, y compris WinME.




 
Enfin c'est pas une raison pour ne pas désallouer la mémoire !!!


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 17-07-2002 à 12:31:13    

ou alors tu mets en spécifications pour ton prog :
Config minimale :
proc > pentium 100
mem > 512 Mo
 
:lol:

Reply

Marsh Posté le 17-07-2002 à 15:24:11    

Des mauvaises langues disaient qu'il suffisait (j'ai pas eu la patience) de lancer puis quitter (sans rien faire d'autre) Word 6.0 sous Windows 3.11 quinze à vingt fois pour faire planter/galérer le système, car c'était pas très très bien écrit :D :D, et de la mémoire était allouée mais pas libérée....
 
Windows se trouvait étranglé/étouffé car plus de ressources disponibles.
 
NB : le jour où j'ai rien à faire, ai encore un PC avec Word 6 ss Win 3.11, je peux vérifier...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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