Estoy usando Debian squeeze y he notado que la memoria siempre se pone a cero. ¿Es esto nuevo en las distribuciones de Linux? Hace algún tiempo, creo que podría usar puts() y se generaría basura.Kernel pone a cero la memoria?
Ejecuto este programa de prueba muchas veces, pero los resultados comentados son siempre los mismos. (Tengo randomize_va_space = 2 en sysctl.conf así que sé que la memoria en diferentes lugares se está utilizando en cada ejecución.)
char *a = malloc(50000000);
a[49999999] = '\0';
puts(a); // it outputs nothing since all are zeroes
printf("%p\n", a);
if(a[5000] == '\0') // this condition is always true
{
puts("It is a nul char.");
}
¿Es posible hacer que el sistema de memoria no cero? ¿Qué opciones podría haber activado esta instalación Debian squeeze que siempre no tiene memoria?
De acuerdo con esta página de WP sobre las funciones de brk/sbrk: http://en.wikipedia.org/wiki/Sbrk usted tiene razón. Pero esto parece un desperdicio de cosas para el kernel. –
¿Por qué? Parece una cosa inteligente para un programa. Si tiene un programa muy estúpido que contiene datos estúpidos sin cifrar y luego simplemente muere sin tener que hacerlo de forma gratuita, podría escribir un programa para aprovecharlo. Sin embargo, estoy bastante seguro de que puedes deshabilitar cuando compilas un kernel. –
"Desactivarlo"? Definitivamente no hay forma de hacer que un kernel pierda datos en el espacio de usuario a través de las opciones normales; tendrías que romperlo intencionalmente para hacer eso. Debido al hecho de que las páginas nuevas son referencias COW de la página cero, no hay un "caso predeterminado" que pueda tener fugas. –