GNU/Linux >> Tutoriels Linux >  >> Linux

new[] ne diminue pas la mémoire disponible tant qu'il n'est pas rempli

Lorsque votre bibliothèque alloue de la mémoire à partir du système d'exploitation, le système d'exploitation réserve simplement une plage d'adresses dans l'espace d'adressage virtuel du processus. Il n'y a aucune raison pour que le système d'exploitation fournisse réellement cette mémoire jusqu'à ce que vous l'utilisiez - comme vous l'avez démontré.

Si vous regardez par ex. /proc/self/maps vous verrez la plage d'adresses. Si vous regardez la mémoire de top, utilisez vous ne le verrez pas - vous ne l'utilisez pas encore.


S'il vous plaît rechercher overcommit. Linux par défaut ne réserve pas de mémoire jusqu'à ce qu'on y accède. Et si vous finissez par avoir besoin de plus de mémoire que disponible, vous n'obtenez pas d'erreur mais un processus aléatoire est tué. Vous pouvez contrôler ce comportement avec /proc/sys/vm/* .

IMO, overcommit devrait être un paramètre par processus, pas global. Et la valeur par défaut ne devrait pas être overcommit.


À propos de la seconde moitié de votre question :

La norme de langage n'autorise aucun retard dans le lancement d'un bad_alloc. Cela doit se produire comme alternative à new[] renvoyant un pointeur. Cela ne peut pas arriver plus tard !

Certains systèmes d'exploitation peuvent essayer de surcharger les allocations de mémoire et échouer plus tard. Cela n'est pas conforme au standard du langage C++.


Linux
  1. Qu'est-ce que ioremap()

  2. Comment puis-je limiter le cache utilisé par la copie afin qu'il y ait encore de la mémoire disponible pour un autre cache ?

  3. Jenkins actif (sorti)

  4. Est-il possible d'allouer une grande quantité de mémoire virtuelle sous Linux ?

  5. Comment puis-je obtenir la quantité de mémoire disponible de manière portable entre les distributions ?

Bash jusqu'à la boucle

Qu'est-ce que la NVM (mémoire non volatile) ?

5 façons de vérifier la mémoire disponible dans Ubuntu 22.04

Fonds d'écran Fedora 30 disponibles au téléchargement

Top 10 des distributions Linux

Utilisation de la mémoire de la commande TOP