Concernant votre dernier Q - la version courte: le message d'erreur concerne l'espace d'adressage virtuel «engagé». Si vous regardez le graphique Commit Charge dans votre deuxième instantané d'écran, vous verrez qu'il est en effet proche ou très proche de la limite.
La quantité de RAM «libre», «disponible» ou «en cours d'utilisation» n'a pas d'importance. En particulier, une pénurie de RAM «disponible» n'est absolument pas la raison du message «mémoire insuffisante» ou «mémoire insuffisante».
La limite de validation est égale à la taille totale RAM + fichier d'échange. Lorsque la mémoire validée est allouée, elle est immédiatement chargée pour "valider la charge" même si elle n'a pas encore été utilisée ... ce qui signifie qu'aucun espace RAM ou PF n'est utilisé immédiatement. L'espace physique (que ce soit dans la RAM ou dans le fichier d'échange) n'est utilisé que lorsque la mémoire est réellement référencée. À partir de ce moment, il doit y avoir un emplacement, jusqu'à ce que le programme le libère ou que tout le processus se termine.
Exemple: supposons que vous n'ayez pas de fichier d'échange, votre limite de validation est donc de 16 Go (la taille de votre RAM). Supposons maintenant que 8 processus essaient chacun de VirtualAlloc (MEM_COMMIT) 1 Go. Résultat: la charge de validation est augmentée de 8 Go. Cependant, il n'y a pas d'impact immédiat sur la RAM! C'est comme si vous aviez acheté un bloc de papier au magasin de papeterie, mais vous n'aviez en fait pas obtenu de papier. Cependant, chaque fois que vous avez besoin d'une nouvelle feuille, une apparaît comme par magie. Jusqu'à ce que vous utilisiez le pad entier (la taille de la région allouée).
Supposons maintenant que chacun de ces processus n'accède réellement qu'à 100 Mo sur ses 1 Go. La RAM utilisée ne serait que de 800 Mo.
Mais comme chacun d'entre eux peut référencer l'ensemble de ses 1 Go, le système d'exploitation doit garantir que 8 Go de RAM + espace de fichier d'échange ... eh bien, juste de la RAM dans le cas où aucun fichier d'échange ... n'est disponible au cas où cela se produirait . Pour en revenir au magasin de papeterie, ils doivent garder suffisamment de papier en stock pour donner à chacun autant de feuilles qu'ils l'ont précédemment acheté.
Par conséquent, le système d'exploitation doit cesser d'autoriser VirtualAlloc (MEM_COMMIT) à réussir lorsque le montant actuel engagé atteint la limite.
Pourquoi? Parce que le processus est censé vérifier le résultat de VirtualAlloc pour voir s'il a réussi. Une fois qu'il l'a fait et a constaté que l'allocation a réussi, le processus est en droit de s'attendre à ce que ses références ultérieures à l'ensemble de la région engagée réussissent.
Si Windows permettait que les frais de validation dépassent la quantité d'espace disponible pour réaliser cet espace, cette attente ne pourrait pas toujours être satisfaite.
Une solution rapide consiste à augmenter la taille par défaut (= initiale) de votre fichier d'échange. À partir de l'explication ci-dessus, vous devriez pouvoir voir pourquoi cela évitera le message d'erreur même si rien ne peut jamais être écrit dans ce fichier . Encore une fois, le système d'exploitation garantit que l'espace pour tous les frais de validation est disponible au cas où il en aurait besoin . Lorsque les processus allouent de la mémoire engagée, ils disent simplement "hé, OS, j'aurais peut-être besoin de cela." Cela ne signifie pas qu'ils l'utiliseront réellement, et cela ne signifie certainement pas qu'ils l'ont déjà utilisé.
Pour en savoir plus, voir ma réponse ici .
Maintenant ... pourquoi vous utilisez autant de commit lorsque vos processus ne semblent pas s'additionner, c'est une autre question. Pour commencer à regarder cela, veuillez afficher l'onglet Performances du Gestionnaire des tâches, section Mémoire.