domingo, enero 18, 2009

Curiosidades en los compiladores de GNU

Haciendo unos programitas de ejemplos, escritos en lenguaje C++, como son muy pequeños y son compilados con el compilador de GNU, g++ en un sistema GNU/Linux, pensé que el binario iba a resultar tan pequeño, dado el tamaño del código fuente, que con respecto el mismo programa escrito en C, no iba a haber mucha diferencia en el tamaño.

Sin embargo la diferencia entre uno y otro si es notable, por ejemplo para el caso particular del siguiente código en C++:


using namespace std;
#include <iostream>

// Funcion que es llamada
int llamada(int x, int y){
cout << "Estamos en la funcion!!" << endl;
return(x+y);
}

int main(void){
//Estos comentarios son propios de C++
cout << "Vamos a llamar a la funcion..." << endl;

// Llamamos a la funcion
// y asignamos
int z=llamada(5,7);
cout << "Resultado: "<< z << endl;

// Llamamos desde la salida estandar
cout << "Resultado desde la llamada: " << llamada(6,7) << endl;
cout << "Programa terminado\n" << endl;

return 0;
}

Y el mismo programa en C:

#include <stdio.h>

// Funcion que es llamada
int llamada(int x, int y){
printf("Estamos en la funcion!!i\n");
return(x+y);
}

int main(void){
//Estos comentarios son propios de C/C++
printf("Vamos a llamar a la funcion...\n");

// Llamamos a la funcion
// y asignamos
int z=llamada(5,7);
printf("Resultado: %d\n", z);

// Llamamos desde la salida estandar
printf("Resultado desde la llamada: %d \n", llamada(6,7));
printf("Programa terminado\n");

return 0;
}


Que como se observa, no hay mayor diferencia en las declaraciones y en el propósito del programa, y sin embargo al compilarlo el primero genera un ejecutable de tamaño de 9372 bytes, mientras que el segundo su tamaño es de 6718 bytes, lo que me lleva a pensar que en una aplicación realmente grande, ese tamaño seguramente se ha de incrementar bastante.

La compilación fue el primero con g++ sin más argumentos, el segundo fue con gcc sin argumentos, el ejemplo es de un documento llamado: Tutorial de C++ (o el diario de Peter Class)

ACTUALIZACIÓN:

Después de leer el comentario, debo aclarar que solo es una suposición, y que en donde dice:"... lo que me lleva a pensar que en una aplicación realmente grande, ese tamaño seguramente se ha de incrementar bastante..."
Una mejor forma de explicar mi idea es:"... lo que me lleva a pensar que en una aplicación realmente grande, una proporción equivalente pudiera mantenerse, siendo el binario de la versión en c++, de mayor tamaño..."