web-dev-qa-db-fra.com

La quantité maximale de mémoire que tout processus sous Windows peut traiter

Limites de mémoire pour les versions Windows indique la quantité maximale de mémoire qu'un processus Windows peut traiter:

Sur les versions 32 bits de Windows, un seul processus peut mapper et adresser n ° plus de 3 Go de mémoire virtuelle à la fois. Dans les versions 64 bits de Windows, un processus 32 bits peut mapper et adresser pas plus de 4 Go de mémoire virtuelle à la fois.

Pour les processus 64 bits, le montant est difficile à calculer car il existe sont nombreuses limites qui se chevauchent qui pourraient s'appliquer en fonction de tous types de facteurs. C'est généralement autour de 7 To.

Ma question: Comment vérifier les valeurs telles que "3 Go", "4 Go", etc.?

Peut-on écrire un code C # pour le prouver? Y a-t-il une méthode pour cela?

Merci.

26
user1108948

Mark Russinovich a publié une série en plusieurs parties sur les ressources de mémoire de Windows qui couvre vraiment très bien cette question. Vous pouvez le trouver ici: http://blogs.technet.com/b/markrussinovich/archive/2008/07/21/3092070.aspx

Il couvre les raisons pour lesquelles les limites sont ce qu'elles sont, ainsi que les tests. Le code des tests flotte quelque part dans les tubes.

Si vous voulez en savoir plus sur les ressources de mémoire et les problèmes que vous pouvez constater à la suite de la fuite des différents types, c'est une bonne lecture.

Mais, en résumé, 32 bits sur un système d’exploitation 32 bits: 2 Go, sauf s’il est défini sur grand espace d’adresse sensible, auquel cas 3 Go. Système d'exploitation 32 bits sur système d'exploitation 64 bits: 2 Go, sauf si défini sur grand espace d'adressage, auquel cas 4 Go.

Processus 64 bits: 2 Go, sauf s'il est défini sur un grand espace d'adressage, auquel cas il peut traiter jusqu'à 8 To, à moins qu'il ne soit hébergé sur des systèmes Intel Itanium limités à 7 To.

Microsoft définit les différentes limites (par types et par types) à l'adresse suivante: http://msdn.Microsoft.com/en-us/library/aa366778.aspx

30
StarPilot

Vous pouvez écrire une sorte de boucle dans une application console pour tester cela.

Peut-être créer une chaîne de 1 Mo exactement et passer en revue un processus de concaténation afin d'augmenter sa taille jusqu'à ce que vous obteniez une erreur ... Stack Overflow.

À chaque itération, écrivez WriteLine la taille ou le nombre d'itérations.

MODIFIER

J'ajouterais, puisque STRING est immuable (bien que techniquement soit un type de référence) pour utiliser OBJECT

Modifier deux

Trisped souligne qu'une chaîne encadrée dans un objet est toujours immuable.

Créer un tableau d'octets [1024] devrait faire l'affaire.

1
Wesley