Si consideri il seguente programma C, 'pause.c':Come posso ridurre il footprint di memoria di un processo Linux minimo
void main() { pause(); }
Compilazione questo su x64 Linux 3.0.0-16-generico utilizzando il comando ' gcc -Os pause.c -o pause 'produce un eseguibile di dimensioni ~ 8 KB. Quando eseguo questo eseguibile ed esamino il suo preciso footprint di memoria usando 'pmap -d PID', mi mostra che la memoria privata allocata al processo è 192KB (varia tra i diversi sistemi di solito, tra 128KB e 192KB).
Esaminando il processo utilizzando valgrind e il gruppo non viene rilevato alcun evento di allocazione della memoria. Ero scettico sul fatto che la cifra di 192KB fosse accurata, ma ho scoperto che l'avvio di 5 istanze del processo di "pausa" comportava circa 1 MB di memoria di sistema.
Non riesco a spiegare l'origine di questa memoria, qualcuno può fornire alcune informazioni sul motivo per cui viene assegnata questa memoria e su eventuali azioni potenziali che potrebbero ridurlo ?, applausi.
Iniziare controllando l'eseguibile ELF; troverai molte cose lì dentro (sezioni di dati/codice, debug, commenti, ecc.). Ricorda inoltre che il tuo programma è collegato almeno con libc; c'è abbastanza spazio lì. –
Ok, la dimensione base del file binario è 8KB e l'utilità pmap prende in considerazione l'overhead di collegamento, la cifra di 192KB è derivata esclusivamente dal programma stesso, salta a 4032 KB quando viene considerato l'overhead del collegamento, ma questa è memoria condivisa e non è una preoccupazione –
provare a sbarazzarsi di libc: void _start() { \t while (1) {} } e compilare con gcc -nostdlib pause.c. Ciò ridurrà l'utilizzo della memoria. – strkol