[PERL] Out of memory sur Win7 x64 [RESOLU]

Out of memory sur Win7 x64 [RESOLU] [PERL] - Perl - Programmation

Marsh Posté le 09-12-2009 à 16:43:37    

Bonjour à toutes et à tous!
 
Désolé par avance si le post n'est pas à la bonne place...  :jap:  
 
Voici mon problème: je dois exécuter un script sur de gros fichiers textes, ou je stocke pas mal d'info dans des tableaux associatifs (ou dictionnaires, tables de hash, c'est selon...). Je l'ai fait sur le poste de mon bureau, qui dispose de 2Go de Ram, et ca passe ricrac (en gros, je surveille la consommation de la ram, et en fermant firefox et outlook c'est bon), le processus perl monte à environ 1.1 Go d'utilisation de mémoire vive.
 
Je me suis dit alors, confiant, que ca serait aussi bien de le faire chez moi, avec un pc disposant de 6Go de Ram, avec windows seven en version 64 bits.
 
Et là, surprise: le même script ne passe plus, avec un beau message "out of memory!" Pourtant, quand je surveille le gestionnaire des taches dans l'onglet performance, je vois que j'ai environ 4300 Mo de "disponible", mais seulement 730 Mo de "libre". J'ai cherché à comprendre la nuance entre "disponible", et "libre", mais pour l'instant je n'ai rien trouvé :(
 
Pour info, je ne fais rien tourner à coté qui pourrais occuper la Ram...
 
Voila, si quelqu'un avait un début de piste, je lui en serai reconnaissant !  :bounce:  
 
Merci d'avance  :jap:


Message édité par lomobob le 11-12-2009 à 00:14:51
Reply

Marsh Posté le 09-12-2009 à 16:43:37   

Reply

Marsh Posté le 09-12-2009 à 17:00:46    

Au hasard:
 
L'allocation retourne un pointeur au dessus de 2Go, un truc dans le runtime du Perl regarde si l'adresse est <= 0 et bing.
 
J'ai jamais utilisé Perl, mais regarde si le binaire qui fait tourner le bouzin n'a pas le flag "large address aware", qui fait que Win7 x64 retourne des allocations > 2Go.
 
Dans le cas d'un process et OS Win32, t'as 2Go d'adressage virtuel utilisateur, un process Win32 sur un Win64 tu peux avoir 4Go si le binaire est flaggé "LARGE ADDRESS AWARE". (Et si le code ne l'est pas vraiment et fait un test à la con => kaboom....)
 
Le flag donne aussi 3Go d'espace user dans le cas d'un OS Win32, mais il faut aussi autoriser le mode /3GB dans le boot.ini pour autoriser ce comportement. (Ce qui te sauve peut-être dans le cas de ton essai au taf)
 
Si ça crashe en activant le flag /3GB sur ta machine du taf, ça pue le code qui fait un test signé sur les adresses allouées.


Message édité par bjone le 09-12-2009 à 17:05:59
Reply

Marsh Posté le 09-12-2009 à 20:50:45    

Merci pour ta réponse Bjone !  :hello:  
 
Bon, comme je suis un peu pressé, j'ai opté pour une solution de gros bourrin: j'ai téléchargé un dvd d'Ubuntu, lancé en mode démo, et zou !
 
Là ça marche nickel, j'ai bien accès aux 5.8 Go de Ram ^^
 
Je replongerai dans mon problème initial une fois mon boulot fini !

Reply

Marsh Posté le 10-12-2009 à 01:16:36    

pour faire court t'as pas un binaire 64bits de perl pour windows ?

Reply

Marsh Posté le 10-12-2009 à 18:17:52    

Normalement, il y a ça chez activestate
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-12-2009 à 00:13:51    

Ca y est, de retour sous windows 7...
 
Effectivement, j'ai installé la version x64, ca roule nickel  :sol:  
 
Merci à tous  :jap:  
 

Reply

Marsh Posté le 11-12-2009 à 00:39:40    

Et au passage une remarque: le code tourne quasiment 2 fois plus vite sous ubuntu (20 min contre 36 min sous windows...)

Reply

Marsh Posté le 11-12-2009 à 01:04:00    

wow, ça fait un peut trop pour être honnête :??:
les binaires du runtime perl sont compilés avec des options d'optimisation comparables ?
c'est comment le perl ? interprété, jité ?


Message édité par bjone le 11-12-2009 à 01:04:47
Reply

Marsh Posté le 11-12-2009 à 09:31:45    

Heu, je t'avoue que je ne m'y connais pas assez dans ce domaine pour te répondre correctement  :??:  
 
Ce que je peux te dire, c'est que perl est toujours installé par défaut avec Linux...

Reply

Marsh Posté le 11-12-2009 à 13:41:20    

Citation :

c'est comment le perl ? interprété

interprété (plus pour pas mal de modules/librairies, appel de code en DLL).
A+,


Message édité par gilou le 11-12-2009 à 13:41:46

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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