malloc es una función de C que sirve para reservar n bytes consecutivos en memoria y devuelve un puntero a ese array.
¿Qué pasa cuando se agota la memoria? En teoría la función malloc debería devolver un puntero nulo y establecer la variable errno a ENOMEM.
¿Qué ocurre en realidad? En la librería de C de Linux (glibc) se usa un algoritmo de reserva de memoria optimista, no contempla el caso de haber agotado la memoria y siempre se devuelve un puntero válido. Según la manpage "uno o varios procesos pueden morir en estas situaciones llegándoles el mensaje 'out of memory'".
Hay una forma de solucionar esto, cambiar el comportamiento del algoritmo estableciendo a 2 la variable overcommit_memory con el comando:
echo 2 > /proc/sys/vm/overcommit_memory
Fuentes:
manpagez.com
linux.die.net
lunes, 28 de diciembre de 2009
Suscribirse a:
Entradas (Atom)