GNU/Linux >> Tutoriales Linux >  >> Linux

new[] no disminuye la memoria disponible hasta que se llena

Cuando su biblioteca asigna memoria desde el sistema operativo, el sistema operativo simplemente reservará un rango de direcciones en el espacio de direcciones virtuales del proceso. No hay ninguna razón para que el sistema operativo realmente proporcione esta memoria hasta que la use, como demostró.

Si miras, p. /proc/self/maps verá el rango de direcciones. Si miras la memoria de top usa no lo verás, aún no lo estás usando.


Busque el exceso de compromiso. Linux por defecto no reserva memoria hasta que se accede a ella. Y si termina necesitando más memoria de la disponible, no obtiene un error, pero se cancela un proceso aleatorio. Puedes controlar este comportamiento con /proc/sys/vm/* .

En mi opinión, el compromiso excesivo debe ser una configuración por proceso, no global. Y el valor predeterminado no debería ser compromiso excesivo.


Acerca de la segunda mitad de su pregunta:

El estándar del idioma no permite demoras al lanzar un bad_alloc. Eso debe suceder como una alternativa a que new[] devuelva un puntero. ¡No puede suceder más tarde!

Algunos sistemas operativos pueden intentar comprometer en exceso las asignaciones de memoria y fallar más tarde. Eso no se ajusta al estándar del lenguaje C++.


Linux
  1. Uso de memoria de Linux

  2. 4 formas de verificar la memoria disponible en Ubuntu 20.04 LTS

  3. Grep:¿Memoria agotada?

  4. ¿Cómo puedo limitar el caché utilizado al copiar para que todavía haya memoria disponible para otro caché?

  5. ¿Cómo puedo obtener la cantidad de memoria disponible de forma portátil entre distribuciones?

Golpear hasta bucle

¿Qué es NVM (memoria no volátil)?

5 formas de verificar la memoria disponible en Ubuntu 22.04

Fedora 30 fondos de pantalla disponibles para descargar

Las 10 mejores distribuciones de Linux

Uso de memoria de comandos TOP