Question

Je lis Windows via c / c ++ . Et je me demande juste un gros fichier peut être mis en correspondance avec la mémoire.

Lorsque nous exécutons une application, un fichier PE est mappée leur adresse de processus (partition utilisateur).

Dans Windows 32 bits, un fichier volumineux (plus de 2 Go) peut être chargé à la partition de l'utilisateur? ou il sera échoué?
S'il est possible, Est-ce que le fichier Paging aider le chargement?

Était-ce utile?

La solution

Vous ne pourrez pas le faire sur 32 bits de Windows. Tout exécution du programme qui veut faire cela aura au minimum 3 modules chargés:

  • ntdll.dll
  • kernel32.dll
  • yourApplication.exe

yourApplication.exe sera par la charge par défaut à 0x00400000.exe, mais vous pouvez changer cette adresse. ntdll.dll et kernel32.dll se chargeront à leur adresse de charge habituelles dans le haut de gamme 0x7Dxx0000.

Vista et versions ultérieures du paragraphe précédent n'est pas vrai que les adresses de charge sont répartis de façon aléatoire, mais les dll sera toujours présent à leur propre adresse dans la première mémoire de 2 Go.

Ainsi, vous n'aurez pas assez d'espace contigu où pour charger votre fichier PE exceptionnellement élevé, même si vous démarrez Windows avec le commutateur / 3GB.

Si vous voulez une bonne idée de l'endroit où les différentes DLL se charge, utilisez VMValidator (gratuit) pour visualiser l'espace d'adressage de votre application. Le point de vue de la mémoire virtuelle montre une représentation graphique (1 pixel par page 4Ko) de mémoire. Les vues Pages et paragraphe vous indiquent l'état de la mémoire virtuelle réelle de chaque page de mémoire et le paragraphe mémoire.

Pour 64 bits de Windows, vous pouvez être en mesure de charger un fichier PE bits 2 Go 64 - il devrait certainement enopugh espace contigu pour lui permettre de charger en mémoire. Quant à savoir si elle travaillerait alors je ne peux pas dire, vous devrez le tester.

Autres conseils

Non, vous ne pouvez pas -. Vous épuiser votre espace VA, quel que soit le réglage du fichier d'échange

Je ne pense pas que le fichier entier est mis en correspondance, seulement jusqu'à la taille de l'image exécutable (comme indiqué dans l'en-tête PE). Donc, une archive auto-extractible> 2 Go devrait être possible. Le code devrait utiliser le fichier standard E / S pour extraire les données de la dernière partie du fichier, après la fin de l'image de PE.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top