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++:
Y el mismo programa en C:
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..."
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..."