Considere el siguiente programa C, 'pause.c':¿Cómo puedo reducir el consumo de memoria de un proceso Linux mínimo
void main() { pause(); }
Compilación esto en x64 Linux 3.0.0-16-genérico utilizando este comando ' gcc -Os pause.c -o pausa 'produce un ejecutable de tamaño ~ 8KB. Cuando ejecuto este ejecutable y examino su huella de memoria precisa usando 'pmap -d PID', me muestra que la memoria privada asignada al proceso es 192KB (varía entre los diferentes sistemas, entre 128KB y 192KB).
El examen del proceso utilizando valgrind y macizo no detecta ningún evento de asignación de memoria. Estaba escéptico de que la cifra de 192 KB fuera precisa, pero descubrí que al comenzar 5 instancias del proceso de 'pausa' consumía aproximadamente 1 MB de memoria del sistema.
No puedo explicar el origen de esta memoria, ¿alguien puede darnos una idea de por qué se está asignando esta memoria y las posibles acciones que podrían reducirla ?, saludos.
Empezar comprobando el ejecutable ELF; encontrará muchas cosas allí (secciones de datos/códigos, depuración, comentarios, etc.). También tenga en cuenta que su programa está vinculado al menos contra libc; eso es bastante espacio justo allí. –
Ok, el tamaño de base del binario es 8KB, y la utilidad pmap tiene en cuenta el overhead de enlace, la cifra 192KB se deriva únicamente del programa en sí, esto salta a 4032KB cuando se considera la sobrecarga de enlace, pero esto es memoria compartida y no es una preocupación –
intente deshacerse de libc: void _start() { \t while (1) {} } y compilar con gcc -nostdlib pause.c. Esto reducirá el uso de memoria. – strkol