22 noviembre 2007

Ejecutables "compactos"

¿Qué ocurre si compilas este código en C con gcc? ¿Cuánto ocupa el ejecutable generado?


#include <stdio.h>
#define TAM 10000

int matriz[TAM][TAM] = {{1, 2, 3, 4}};

int main(int argc, char *argv[]) {
return 0;
}



xim@cagallon:~/Desktop/lalala$ gcc big.c
xim@cagallon:~/Desktop/lalala$ ls -lah a.out
-rwxr-xr-x 1 xim xim 382M 2007-11-22 20:17 a.out


Sólo 382 megas. Esto es debido a que hemos creado una matriz muy grande y la hemos inicializado. Aunque sólo hemos puesto unos pocos valores, el gcc ha creado la matriz entera en el ejecutable.


#include <stdio.h>
#define TAM 10000

int matriz[TAM][TAM];

int main(int argc, char *argv[]) {
matriz[0][0] = 1;
matriz[0][0] = 2;
matriz[0][0] = 3;
matriz[0][0] = 4;
return 0;
}


Inicializando la matriz en el main en vez de en la definición nos ahorramos un poco de espacio en disco.


xim@cagallon:~/Desktoplalala$ gcc big.c
xim@cagallon:~/Desktop/lalala$ ls -lah a.out
-rwxr-xr-x 1 xim xim 6,2K 2007-11-22 20:19 a.out