2010-03-15 2 views
0

J'ai une application qui fonctionne sur x86 32Win et nous utilisons la mémoire 1.2Gbyte qui alloué à partir de la fonction VirtualAlloc (pour éviter les défauts de page). Je veux vraiment augmenter ma mémoire d'application et j'ai recompilé mon projet sous MSDVE 2008 avec wow64 (OS Exp 64Bit).Comment puis-je augmenter ma mémoire d'application, jusqu'à l'utilisation de la fonction VirtualAlloc, avec le WOW64?

J'ai essayé d'allouer plus de 2 Go et la fonction Erreur de retour VirtualAlloc.

J'ai même essayé de mettre le drapeau LARGEADDRESSWARE sur on, et le résultat était le même!

Comment puis-je augmenter ma mémoire d'application, jusqu'à l'utilisation de la fonction VirtualAlloc, avec le WOW64?

+0

Pourquoi voudriez-vous plus que 2GB? Même Vista utilise moins. – moatPylon

+0

J'ai besoin d'un tampon de taille importante pour le traitement d'image sans défaut de page – user294031

+0

Vous voulez dire des erreurs de page de système d'exploitation, ou les défauts de page de votre application? Je veux dire, VirtualAlloc ne garantit pas que certaines parties de votre tampon ne seront pas échangées sur le disque, pour cela vous auriez besoin d'utiliser GlobalAlloc. Aussi, pourquoi essayez-vous d'empêcher les fautes de page? – moatPylon

Répondre

0

Appellez-vous un seul appel à VirtualAlloc? Si c'est le cas, le système d'exploitation devra renvoyer une seule plage d'adresses continue.

Bien qu'un EXE 32 bits LARGEADDRESSAWARE puisse accéder aux 4 Go d'espace d'adressage sous WOW64, cela ne signifie pas que vous pouvez trouver un espace d'adressage continu> 2 Go.

Essayez d'effectuer plusieurs appels pour des blocs plus petits.

+0

oui je le fais avec un appel de signgle. y a-t-il un moyen d'en faire une grande allocation? – user294031

+0

Pas vraiment avec une application 32 bits. Si vous avez besoin de beaucoup d'espace d'adressage contigu, vous devez compiler 64 bits. Au moment où votre code est capable d'appeler VirtualAlloc, le système d'exploitation aura déjà mappé votre exécutable et de nombreuses DLL à différents endroits dans l'espace d'adressage, en fragmentant ce qui est disponible. Par exemple, une seule page allouée à 0x80000000 vous limiterait à au plus un bloc de 2 Go. –