Question

J'ai une application qui alloue de la mémoire avec « nouvelle » et les affranchit avec « suppression » dans certaines parties du code. Le problème est que chaque fois qu'il dépasse la limite de la mémoire du système (disons 2 Go), Windows envoie un signal kills au processus. Je pense que ce n'est pas habituelle car il devrait utiliser l'espace d'échange (je pense que dans les fenêtres, il est appelé mémoire virtuelle), non? Ma demande est écrit en C ++ / Visual Studio.

Était-ce utile?

La solution

Voici comment vous pouvez le faire jusqu'à 3 Go pour un de traitement; C'est le maximum absolu que vous pouvez l'avoir pour Windows 32 bits des applications. Pas plus que cela et vous allez avoir besoin d'utiliser une version 64 bits de Windows.

C'est beaucoup de mémoire. vous pourriez peut-être envisager de diviser votre application en plusieurs processus et communiquer entre eux.

Autres conseils

Le système d'exploitation ne tue pas votre application, une exception non gérée fait. Vous voulez examiner votre application avec perfmon, et regarder ces compteurs, Ensemble de travail, octets virtuels Octets privés. Vous obtiendrez des exceptions lorsque vos octets réservés se rapproche de 2 Go. Ainsi, vos octets engagés et octets de RAM sont beaucoup moins.

Voici un article de Nice sur l'espace d'adressage virtuel, y compris commis vs réservé.

La morale de l'histoire, ne pas essayer d'allouer lorsque les octets réservés se rapproche de 2 Go, pour un processus 32 bits.

Windows ne pas utiliser des signaux. Vous devriez obtenir l'exception std :: badalloc lorsque vous manquez de mémoire. Ce qui, quand uncaught, exécutera automatiquement la fonction fin (). L'exception est visible dans la fenêtre de sortie.

Je n'ai pas regardé de trop près, mais vous pouvez trouver les réponses que vous voulez ici:

Pouvez-vous attribuer une très grande partie de la mémoire unique (> 4 Go) en C ou C ++?

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