Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1361 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Taille maximal d'un executable sous XP SP2

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Taille maximal d'un executable sous XP SP2

n°1653729
stilgar78
Posté le 06-12-2007 à 12:29:46  profilanswer
 

Salut,
 
Je cherche la taille maximal de memoire alloué a un processus sous Windows XP pro SP2  / 32 Bit.
 
On utilise Visual C++ au boulot
 
Merci d'avance pour votre aide.


Message édité par stilgar78 le 07-12-2007 à 12:22:09
mood
Publicité
Posté le 06-12-2007 à 12:29:46  profilanswer
 

n°1653739
masklinn
í dag viðrar vel til loftárása
Posté le 06-12-2007 à 12:35:11  profilanswer
 

2Gb?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1653745
stilgar78
Posté le 06-12-2007 à 12:41:03  profilanswer
 

j'ai entendu dire dans je ne sais plus quel article que c'etait 2gb aussi ... mais j'aimerais un avis formel.
 
On a un soft qui plante des qu'il atteint 1.1 / 1.2 gb en ram et je pensais qu'on aurait de la marge jusqu'a 2Gb (test effectué sur une becane avec 2 gb et une autre avec 4gb)

n°1653763
LePhasme
Les Belges domineront le monde
Posté le 06-12-2007 à 12:58:48  profilanswer
 

oublie pas que t'as d'autres process qui consomment de la mémoire aussi...

n°1653810
stilgar78
Posté le 06-12-2007 à 13:53:28  profilanswer
 

LePhasme:
je suis d'accord avec toi ... mais sur mon systeme avec 4Go ... il n y avait pas grand chose qui tournait a part notre applicatif.
 
Et j'ai eu la meme punition qu'avec 2 Go, blocage a 1.1 / 1.2 Go
 
J'ai monitoré la taille du processus avec le task manager
 
 

n°1653988
stilgar78
Posté le 06-12-2007 à 16:47:10  profilanswer
 

personne d'autre ?

n°1654052
tpierron
Posté le 06-12-2007 à 18:25:14  profilanswer
 

Regarde plutôt du coté de process explorer pour monitorer des processus sous Windows. L'inutilité abyssale de TaskManager n'étant plus à prouver, Process Explorer pourra te montrer tout un tas d'autres infos, sources de problèmes potentiels : virtual memory, leak de handles, etc ....
 
Edit : sinon ton appli c'est plutôt du genre usine à gaz à faire des milliards d'allocations à gauche à droite et à libérer ça sans trop savoir quand (avec tous les emmerdes associées : fragmentation, leak), ou c'est du genre à allouer de gros bloc ?


Message édité par tpierron le 06-12-2007 à 18:28:43
n°1654229
stilgar78
Posté le 07-12-2007 à 00:30:40  profilanswer
 

tpierron:
Voici un topo:
 
l'executable, appelons le test.exe pese en lui meme un truc du genre 350 Ko
 
Une fois lancé, je suppose qu'il charge tout un tas de .dll qui le font peser 35Mo en mode IDLE
 
Cette executable sert a afficher des images de radiologie qui peuvent etre tres lourd (genre 8 à 16 images de 54 Mo chacune)
 
manque de chance, avec un certain examen radiologique particulierement big, je vois la quantité de memoire grimper de 35Mo jusqu'a 1.1 / 1.2 Go et mon appli me pond un "memoire insuffisante"
 
En gros, je sais deja pourquoi j'ai ce bug, au lieu de charger les "pixels data" des images une seule fois, il peut arriver que je les charges plusieurs fois en RAM.
 
Vu que mes "Pixel data" pese 400 Mo par defaut, si j'ai un bug qui charge le tout plusieurs fois en ram ... c'est normal que ca plante.
 
Le bug du "multiple loading" des pixel data est en cours de resolution, il n'empeche que dans certains cas extremes, je peux avoir des examens radiologique qui peseront "par defaut" 1.2 go.
 
Vu le pkoi du comment de ma question concernant la taille maximale d'un executable en memoire.
 
J'ai été voir dans les propriété de l executable pour essayer de changer le "mode de compatibilité" qui est par defaut Win 95 et ca ne change rien.


Message édité par stilgar78 le 07-12-2007 à 00:31:55
n°1654233
IrmatDen
Posté le 07-12-2007 à 00:52:46  profilanswer
 

Ca ne répond pas vraiment à la question que tu poses, mais as-tu rééllement besoin de toutes les données en mémoire à la fois?
Tu ne pourrais pas implémenter une solution de streaming? (C'est utilisé avec un certains succès dans les jeux à "monde ouvert" )

n°1654235
stilgar78
Posté le 07-12-2007 à 01:59:04  profilanswer
 

IrmatDen:
 
malheuresement, je dois loader toutes les pixel data d'un seul coup car je dois pouvoir faire des operations en temps reel sur ces images (Zoom, fenetre / window level)
 
Par contre, de plus, a terme, je vais devoir loader non seulement les pixel data d'un patient en cours ( en moyenne 200 Mb / max 800Mb) mais aussi les pixels data de 5 autres patients

mood
Publicité
Posté le 07-12-2007 à 01:59:04  profilanswer
 

n°1654324
bjone
Insert booze to continue
Posté le 07-12-2007 à 10:29:18  profilanswer
 

mets un windows 64 et recompile ton app en 64bits.

n°1654338
masklinn
í dag viðrar vel til loftárása
Posté le 07-12-2007 à 11:04:11  profilanswer
 

stilgar78 a écrit :

j'ai entendu dire dans je ne sais plus quel article que c'etait 2gb aussi ... mais j'aimerais un avis formel.

 

On a un soft qui plante des qu'il atteint 1.1 / 1.2 gb en ram et je pensais qu'on aurait de la marge jusqu'a 2Gb (test effectué sur une becane avec 2 gb et une autre avec 4gb)


C'est pas la taille de l'exécutable ça, c'est la taille de la mémoire allouable à un processus [:pingouino]

stilgar78 a écrit :

malheuresement, je dois loader toutes les pixel data d'un seul coup car je dois pouvoir faire des operations en temps reel sur ces images (Zoom, fenetre / window level)


Heuu non ça n'impose pas de tout avoir en mémoire en permanence, et justement dans ton cas et vu les volumes de données ce serait plus que probablement une bonne idée de faire des recherches sur le chargement partiel et l'optimisation de la taille en mémoire


Message édité par masklinn le 07-12-2007 à 11:04:27

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1654363
stilgar78
Posté le 07-12-2007 à 11:17:13  profilanswer
 

Masklinn:
 
Merci de ta rectification, je voulais bien parler de la taille de la memoire allouable a un processus !
 
En fait, si ces images super big ne sont pas en memoire ... elle seront sur le disque dur et charger 400 Mb aussi vite que possible a partir d'un disque dur, ca prend quand meme du temps (j'ai deja tenté la piste Raid  5 pour un gros throughput des données) et je divise mon temps de loading par 2.
 
Au final, je dois pouvoir loader
- toutes les images d'un patient en memoire le plus vite possible
- pendant que l'utilisateur regarde ces images et les manipule je loade les images du (ou des) patients suivants (present dans une "worklist" )
(idealement il serait interessant de bufferiser les 3 ou 4 patients suivants)
- au lieu de loader les images du patient suivant a partir du disque dur, je les loaderai directement a partir de la ram
 
Throughput HD = 65Mo seconde
Throughput Raid 5 = 166 Mo seconde (sur perc 5i / 4 disk de 750go)
Throughput Ram DDR2 = plusieurs Go/seconde
 
inconnu : debit max de la carte graphique (qui semble etre une bouse et je n'ai pas le droit de la changer, elle pilote des ecrans specifiques)

Message cité 1 fois
Message édité par stilgar78 le 07-12-2007 à 11:17:52
n°1654366
stilgar78
Posté le 07-12-2007 à 11:20:38  profilanswer
 

bjone:
si je suis limité par l'os qui dit:
4 Gb max utilisable en environnement 32bit (XP Pro 32 bit / 2003 Server 32 bit)
 
la solution sera en effet de passer a du 64 bit et la je pourrais utiliser si il le faut une config avec 6 ou 8 Gb de ram sans probleme (histoire de bufferiser sans probleme 10 a 12 patients en ram)
 

n°1654369
masklinn
í dag viðrar vel til loftárása
Posté le 07-12-2007 à 11:27:05  profilanswer
 

stilgar78 a écrit :

Masklinn:
 
Merci de ta rectification, je voulais bien parler de la taille de la memoire allouable a un processus !
 
En fait, si ces images super big ne sont pas en memoire ... elle seront sur le disque dur et charger 400 Mb aussi vite que possible a partir d'un disque dur, ca prend quand meme du temps (j'ai deja tenté la piste Raid  5 pour un gros throughput des données) et je divise mon temps de loading par 2


Bien sûr que ça prend plus de temps et que c'est plus lent.
 
Le truc, c'est qu'un logiciel rapide qui marche pas, il sert à rien. Un logiciel lent qui fonctionne par contre ça a un intérêt, et ça peut ensuite être accéléré [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1654456
stilgar78
Posté le 07-12-2007 à 12:24:20  profilanswer
 

Masklinn:
 
en fait, j'ai deja un "work around" pour ne pas bloquer l'appli et il consiste a charger les images une par une dans le cas d'examens tres gros.
 
Par ailleurs, le probleme ne s'est presenté qu'une fois sur 3000 cas. La situation est de ce fait exeptionnelle.
 
Par contre, je prefere me dire que ce serait pas mal d'anticiper les problemes a venir ...
 
 
 

n°1654693
tpierron
Posté le 07-12-2007 à 16:41:55  profilanswer
 

Ouf, de l'imagerie. Clairement il faut optimiser tes allocations mémoires. Je bosse un peu près dans un domaine similaire (imprimerie : je dois afficher des images à plusieurs plans assez gigantesques : TIFF 1bit G4 200000x150000px). Décompressé, ça fait plusieurs Go en RAM. Impossible à charger sur une machine 32bits.
 
Plusieurs solutions possibles, et autant te dire tout de suite qu'il y du boulot pour gérer ça correctement :
* Images pyramidales : c'est le truc classique que quasiment tous les logiciels de visualisations font pour des images gigantesques. Tu pré-process tes images pour en faire des fichier tuilés (le TIFF gère ça en natif) et tu généres plusieurs images à des résolutions de plus en plus petites jusqu'à obtenir un truc affichable à l'écran. C'est délicat à gérer : plusieurs fichiers à traiter en parallèle (donc multi-thread, sinon c'est trop lent), en C forcément (donc risque de tirage de balle dans les pieds). Inconvénient : pré-traitement à faire. Petit bench vite fait : 4 TIFF CMYK G4 200000x150000, disque SCSI dual Xeon 2.4Ghz, prétraité sur 2 niveaux : 1 minute 30 de processing (ça implique : décompresser les 4 fichiers g4, créer 4 fichiers tuilés (256x256px) équivalents recompressés en G4 et créer 4 autres fichiers tuilés 8bits en parallèle, à 1/8 de la résolution du g4, compressé en LZW). Fichiers originaux faisaient dans les 760Mo, ça a créer 1Go de fichier temporaires. Avantages : accès constant quel que soit le niveau de zoom et de l'endroit que tu visualises et ça ne consomme pas beaucoup de RAM (en mode IDLE mon appli prends moins de 10Mo, quand on charge des tuiles, ça peut monter à 100Mo).
 
* Fichiers mappé en mémoire : là il faut que tes données fasse moins de 2Go (décompressée, ou si tu es un vrai kador, tu peux tenter une décompression à la volée). Windows et Linux savent faire ça très bien, c'est très rapide (infiniment plus que faire du streaming "à la main" ). Le hic, c'est qu'il faut un fichier non compressé. Un fichier mappé en mémoire permet d'accéder au fichier comme s'il s'agissait d'une chaine de caractère. Le système d'exploitation va se démerder pour charger/libérer les pages en fonction de la partie du fichier accédée. Inconvénient : pas d'image de plus de 2Go et le premier accès va être super lent (le temps que les pages soient dans le cache disque).
 
Edit : L'autre avantage des fichiers mappés, c'est que ça ne va pas (trop) fragmenter la mémoire de ton processus, puisque les blocs alloués seront indépendants de ton heap. Et surtout lorsque tu supprime ton placage en RAM, le système va réellement libérer la RAM associé.
 
Je pense que c'est une solution que tu devrais explorer. La première sera trop de boulot si tu n'as pas prévu ça à l'origine.


Message édité par tpierron le 07-12-2007 à 16:54:54
n°1656273
tbp
Posté le 11-12-2007 à 09:33:05  profilanswer
 

Qques corrections.
 
Premièrement xp, en 32bits split par défaut l'espace d'adressage en 2G/2G (espace utilisateur/noyau); il est cependant possible de passer en 3/1 ou encore d'activer la PAE, tjs en restant en mode 32bits.
Mais il y a bataille pour caser dans ces 2G (par défaut) tout un assortiment de verrues; d'ou un morcellement; d'ou les problèmes à allouer un espace contigue. Les dlls sont à compter parmi ces verrues.
Une premiere approche est donc de prendre de vitesse tout le monde. Il est assez facile de réclamer 1.8G de cette façon.
 
Je passe sur le out-of-core (bien que le mappage y ait à voir), pour signaler que l'on peut mapper partiellement un fichier et, par exemple, coller des handler sur les page fault pour bouger la fenêtre (de façon transparente).
Même sur xp. Maintenant reste à savoir pourquoi diable on utiliserait xp pour ce genre de manip.

n°1656338
Joel F
Real men use unique_ptr
Posté le 11-12-2007 à 10:25:41  profilanswer
 

la solution ficheir mappé est la meilleur AMHA.
Me semble que tt les applis manipulant des blady big images utilisnt ça [:dawa]

n°1656349
tbp
Posté le 11-12-2007 à 10:33:07  profilanswer
 

Sauf que comparé à la simplicité biblique d'un mmap, win32/64 est une tannée. Et que la problématique de la fragmentation reste la même tant pour un VirtualAlloc que MapViewOfFile; c'est l'espace d'adressage qui fait défaut.

n°1656364
Taz
bisounours-codeur
Posté le 11-12-2007 à 10:40:28  profilanswer
 

passe en 64bits

n°1656386
Joel F
Real men use unique_ptr
Posté le 11-12-2007 à 10:57:23  profilanswer
 

ah certes :/ J'ai jamais mmappé sous win faut dire :s
 
en fait :
http://www.boost.org/libs/iostream [...] _file.html

n°1656391
tbp
Posté le 11-12-2007 à 11:09:27  profilanswer
 

Code :
  1. std::for_each(jambe_de_bois, jambe_de_bois + n, apply(mercurochrome));

n°1656881
Pumpy One
Six star rank
Posté le 11-12-2007 à 22:11:54  profilanswer
 

moi j'essayerais de passer en 64 bits


---------------
General and Commander in chief of the Army of the united Colonies
n°1656884
el muchach​o
Comfortably Numb
Posté le 11-12-2007 à 22:13:33  profilanswer
 

tbp a écrit :

Sauf que comparé à la simplicité biblique d'un mmap, win32/64 est une tannée. Et que la problématique de la fragmentation reste la même tant pour un VirtualAlloc que MapViewOfFile; c'est l'espace d'adressage qui fait défaut.


Exactement. J'ai rencontré exactement le même problème sous Linux pour exactement la même application (imagerie médicale, images DICOM). La seule solution était effectivement le portage en 64 bits.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1657369
stilgar78
Posté le 12-12-2007 à 19:11:00  profilanswer
 

el muchacho:
 
tu bosses chez G E ? :) perso je connais que la Advantage Window qui tourne sous nux

n°1819694
logoatomiq​ue
Posté le 01-12-2008 à 06:46:37  profilanswer
 

Avec de très grosses images, il serait intéressant de tester avec le logiciel ImageVisu.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Taille maximal d'un executable sous XP SP2

 

Sujets relatifs
Pointeur en argument -> obtention de la taille de l'élément pointé?Probleme porgramme VB
Javascript et IE7 : probleme de taille !Menu images, espace dans IE6 lorsqu'on agrandit la taille du texte
Changer taille, couleur, police d'un texte par listbox[Resolu]wxWidgets : forcer un objet à utiliser la taille du plus grand
trouver taille du heap java[Flash MX 2004] Interpolation de taille de rectangle
executable UNIXCréation d'un bitmap de grande taille
Plus de sujets relatifs à : Taille maximal d'un executable sous XP SP2


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR