Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Tamaño de los ejecutables en Windows

Estas en el tema de Tamaño de los ejecutables en Windows en el foro de C/C++ en Foros del Web. Tengo una duda acerca del tamaño que debiera tener el ejecutable de un programa escrito en C++ una vez compilado. Cuando compilo programas sencillos (10 ...
  #1 (permalink)  
Antiguo 31/07/2007, 15:46
 
Fecha de Ingreso: diciembre-2005
Ubicación: Redondela (Galicia)
Mensajes: 368
Antigüedad: 18 años, 4 meses
Puntos: 1
Tamaño de los ejecutables en Windows

Tengo una duda acerca del tamaño que debiera tener el ejecutable de un programa escrito en C++ una vez compilado.

Cuando compilo programas sencillos (10 líneas: más que sencillos, son programas de ejemplo) en Linux, sus ejecutables ocupan unos 8 o 9 Kb. Sin embargo, cuando los compilo en Windows pesan unos 450 Kb, ¿es esto normal? La diferencia es abismal... así que yo creo que algo falla. En Linux uso gcc y en Windows (es un XP) utilizo gcc (lo instalé con Cygwin) y Mingw32 (me pasa lo mismo con ambos).

Por cierto, que si compilo programas en C, pesan lo mismo en ambas plataformas, unos 8 o 9 Kb
  #2 (permalink)  
Antiguo 01/08/2007, 00:16
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 5 meses
Puntos: 4
Re: Tamaño de los ejecutables en Windows

Me parece que es normal, a mi también me sucede, pero esa diferencia no es a escala, me refiero a que si haces un programa de 20 lineas, no será el doble de pesado que uno de 10, sino un poquito más que el de 10.

En Linux existe desde la génesis del sistema la idea de evitar que las cosas se dupliquen/reinventen. Por eso mismo existen muchas librerías comunes al sistema.

En cambio en windows, si te haz fijado, cada programa es un mundo a parte, a veces es posible que los programas usen librerías comunes de C:\windows\system32, pero en general no es tan así.

Resumen:
- En Linux, todas las llamadas al sistema, y cosas comunes están bien distribuidas en el sistema, así que al compilar no es necesario reincoorporar todo ese código en los ejecutables.

- En Windows: Es necesario incluir código extra, ya que nadie te asegura que el usuario tiene tal o cual librería "de terceros" y en que versión, por lo tanto se prefiere incluir versiones estáticas (en algunos casos) para evitar incompatibilidades. Finalmente esta es una de las causas de porque el sistema se ve tan abultado de tamaño cuando instalas muchos programas.
__________________
Blog | Tecnosquad
  #3 (permalink)  
Antiguo 01/08/2007, 00:52
 
Fecha de Ingreso: diciembre-2005
Ubicación: Redondela (Galicia)
Mensajes: 368
Antigüedad: 18 años, 4 meses
Puntos: 1
Re: Tamaño de los ejecutables en Windows

Algo así me imaginaba. Gracias
  #4 (permalink)  
Antiguo 01/08/2007, 01:24
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Tamaño de los ejecutables en Windows

Cita:
Iniciado por ArrauKano Ver Mensaje
En Linux existe desde la génesis del sistema la idea de evitar que las cosas se dupliquen/reinventen. Por eso mismo existen muchas librerías comunes al sistema.

En cambio en windows, si te haz fijado, cada programa es un mundo a parte, a veces es posible que los programas usen librerías comunes de C:\windows\system32, pero en general no es tan así.
¿Que? ¿Desde cuando existen las DLLs en Windows? Todas las aplicaciones para Windows usan DLLs.

Cita:
Iniciado por ArrauKano Ver Mensaje
Resumen:
- En Linux, todas las llamadas al sistema, y cosas comunes están bien distribuidas en el sistema, así que al compilar no es necesario reincoorporar todo ese código en los ejecutables.
En Windows las llamadas al sistema estan todas en DLLs y estas DLLs no se incorporan JAMAS al ejecutable, son enlazadas estatica o dinamicamente.

Cita:
Iniciado por ArrauKano Ver Mensaje
- En Windows: Es necesario incluir código extra, ya que nadie te asegura que el usuario tiene tal o cual librería "de terceros" y en que versión, por lo tanto se prefiere incluir versiones estáticas (en algunos casos) para evitar incompatibilidades. Finalmente esta es una de las causas de porque el sistema se ve tan abultado de tamaño cuando instalas muchos programas.
¿Como cual codigo extra? Si yo compilo en release con el VC++ genero un ejecutable de por ejemplo 36KB. La CRT ocupa bastante pero no cientos de KBs ni mucho menos, las versiones estaticas son justamente de la CRT, facilmente reemplazable por la version en DLL (msvcrt.dll por ejemplo, depende del compilador). De ser necesario usando las opciones del compilador y el enlazador es posible generar ejecutables de 1024 bytes.

Eso de las librerias de terceros, que tampoco me lo creo mucho, no explica para nada el problema planteado.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 01/08/2007, 01:54
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Tamaño de los ejecutables en Windows

Vamos a hacer unas pruebas, el codigo de ejemplo que viene con el Dev-C++ haciendo un proyecto en C++ es el siguiente:

Código:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    system("PAUSE");
    return EXIT_SUCCESS;
}
Con gcc (o afines) obtenemos un ejecutable de 464KB, con VC++ el ejecutable es de 27KB seguramente es culpa de Windows ...

Pero todavia no estamos en igualdad de condiciones ya que el gcc enlaza estaticamente contra la CRT dinamica (MSVCRT.dll) y VC++ no (usa por defecto la CRT estatica, dentro del ejecutable). Ahora vemos que si enlazamos estaticamente la CRT dinamica obtenemos un hermoso ejecutable de 4KB. Debe ser culpa de Windows ...


Muy probablemente haya una forma de evitar este problema pero no me interesa en lo mas minimo, mi intencion es simplemente demostrar la falta total de veracidad en las afirmaciones anteriores sobre Windows. Creo que quedo claro que la plataforma no limita de ninguna manera.

PD. Trate de poner el codigo generado por los dos compiladores para el archivo objeto (no el ejecutable sino el del modulo de .cpp nuestro) pero el del gcc era tan largo que no me dejaba publicar el mensaje, si tienen el dumpbin denle un vistazo y entre eso y las secciones creadas se daran una idea de la razon por la cual tiene ese tamaño.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 01/08/2007 a las 02:00 Razón: PD.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:20.