Je travaille actuellement sur une application héritée (win32, Visual C++ 2005) qui alloue de la mémoire en utilisant LocalAlloc (dans une bibliothèque fournie je ne peux pas changer). L'application conserve un très grand état dans la mémoire fixe (créée au début avec plusieurs appels à LocalAlloc (LPTR, taille)). Je remarque qu'en mode release je manque de mémoire à environ 1.8gb mais en debug il passe heureusement à plus de 3.8gb. Je cours XP64 avec le commutateur/3gb. J'ai besoin d'augmenter la mémoire utilisée dans l'application et j'atteins la limite de mémoire en sortie (le débogage fonctionne bien). Des idées?Problème de mémoire WIN32 (différences entre débogage/édition)
Répondre
La configuration de débogage est probablement liée à/LARGEADDRESSAWARE et la configuration Release est liée à/LARGEADDRESSAWARE: NO (ou totalement absente).
Vérifiez Linker-> System-> Activer Large Addresses dans les propriétés de configuration du projet.
Merci, c'est .... –
Des sons comme votre version Release sont également compilés en tant que x86. Sinon, il doit y avoir quelque chose dans votre code qui traite le pointeur comme des entiers 32 bits signés et ce code n'est actif que dans Release.
Comment le manque de mémoire se manifeste-t-il?
En outre, il n'y a pas de raison d'utiliser/drapeau 3Go pour XP64 lors de l'exécution des applications 64 bits: il ne change rien dans ce scénario
Pas une application 64 bits. –
Ok, je suppose que c'est une application 64 bits puisque vous obtenez 3,8 Go. Oui, vous avez raison, cela peut être fait à partir d'un système d'exploitation de 32 bits sous 64 bits. Alors, comment le manque de mémoire se manifeste-t-il? Je suggère de regarder là d'abord – Rom
À court de mémoire se manifeste par un appel à LocalAlloc renvoyant NULL .... :-) –
Une suggestion: un coup d'oeil aux adresses de base des DLL qui sont chargés dans l'espace de processus en mode release et debug, et voir s'il y a beaucoup de différence. Il est possible que, dans le dossier de publication, des DLL soient chargées aux adresses de sorte que, s'il y a suffisamment d'espace libre pour prendre en charge un appel LocalAlloc(), il n'y a pas assez d'espace d'adressage continu pour le satisfaire. (Pour un exemple artificiel, supposons qu'il y ait une DLL chargée à 0x40000000 (1Gb), une autre à 0x80000000 (2Gb) et une autre à 0xC0000000 (3Gb) .Même si ces DLL étaient vraiment petites, le processus ne pouvait pas allouer plus de 1 Go à la fois, car il n'y a pas de bloc continu d'espace d'adresse laissé libre qui soit assez grand).
Vous pouvez également obtenir une variante de ce problème si les allocations de mémoire se sont produites dans un ordre différent dans le débogage et la publication.
- 1. différences entre Msxml2.ServerXMLHTTP et WinHttp.WinHttpRequest?
- 2. Différences entre Smalltalk et python?
- 3. Différences entre JPA et JPA2
- 4. Différences entre Exception et Erreur
- 5. Différences entre App.Config et Web.Config?
- 6. Différences entre deux requêtes analytiques
- 7. Différences entre ado et bde
- 8. Différences entre BasicRenderEngine et LazyRenderEngine?
- 9. Win32 TreeCtrl allocation de mémoire TVN_ENDLABELEDIT
- 10. Différences C# différant entre VS2008 et IIS6
- 11. Différences entre set et ordered_set dans Mnesia?
- 12. Différences entre SQL Plus et SQL "normal"?
- 13. Différences entre Silverlight 2.0 et 3.0
- 14. Développement Différences d'investissement entre iPhone et Symbian
- 15. Oracle Différences entre NVL et Coalesce
- 16. Problème de mémoire C/C++?
- 17. Différences entre Java et C# et .NET
- 18. différences entre StringBuilder en Java et C#
- 19. Différences WxPython entre Windows et Linux
- 20. différences entre smack, amadou et whack
- 21. différences entre nhibernate 1.2 et 2.0
- 22. Différences d'implémentation entre Zend_Rest_Server et Zend_Rest_Controller
- 23. Différences entre .NET 3.0 et 3.5?
- 24. Différences entre les contrôles WPF Frame et WebBrowser
- 25. Allocation de mémoire entre iPhone 2G et 3G
- 26. différences entre deux instantanés de base de données SQL Server
- 27. Obtention de différences d'enregistrement entre 2 tables presque identiques
- 28. Différences dans l'héritage de modèle Django entre 0,96 et 1,0?
- 29. Différences de rendu entre Firefox 3.0 et 3.5
- 30. Différences entre implémentations de socket winsock et BSD
Je réalise que je devrais mettre à jour l'application en 64 bits pour avoir accès à de plus grandes quantités de mémoire fixe. Cependant j'ai besoin de connaître la limitation afin de convaincre mon patron que c'est seulement ainsi je dois prendre une décision: a) Déterminez comment allouer un peu plus de mémoire (approximativement 100mb). Job done -OR- b) Justifiez la mise à jour en 64 bits et demandez aux autres équipes de mettre à jour leurs bibliothèques. –