Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: bomba1990 en 28 Noviembre 2010, 20:05 pm



Título: porque al compilar pesa tanto un programa?
Publicado por: bomba1990 en 28 Noviembre 2010, 20:05 pm
hola a todos, hace poco me puse a estudiar c++ y pues comense con dev-c++ gracias a unos post que lei me cambie a codeblock, hice un programa sencillo que no pasa de 100 lineas pero a la hora ce compilar veo que pesa 978 kb y si modifico para que salga el release que dice codeblocks pesa 478kb pero eso me parece una exageracion cuando antes no pasarian de 50kb.

me imagino que algo estoy haciendo mal, pero que?

bueno como informacion adicional a ver si me pueden ayudar les digo que lo estoy compiladon con mingw el que trae incorporado codeblocks.


Título: Re: porque al compilar pesa tanto un programa?
Publicado por: APOKLIPTICO en 28 Noviembre 2010, 20:39 pm
Estas usando mucho stack?
Es decir, estas declarando arrays muy grandes estáticamente?


Título: Re: porque al compilar pesa tanto un programa?
Publicado por: bomba1990 en 28 Noviembre 2010, 21:26 pm
bueno eso podria ser, pero creo que en un programa como este

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    cout << "Hello world!" << endl;
  8.    return 0;
  9. }

no es mucha la memoria que se necesita. y pesa casi lo mismo.


Título: Re: porque al compilar pesa tanto un programa?
Publicado por: piou en 28 Noviembre 2010, 21:58 pm
A mi no me gusta mucho lo de cout, cin y endl, pero compilando esto:

Código:
#include <stdio.h>
using namespace std;
 
int main()
{
    printf("Hello World\n");
    return 0;
}

Con el g++ en linux, si le hago un ls me da:

Código:
-rwxr-xr-x 1 fer fer 7264 2010-11-28 21:56 a.out
Solo 7 KBytes. Mira a ver cambiando las funciones si te pesa menos.


Título: Re: porque al compilar pesa tanto un programa?
Publicado por: Beakman en 28 Noviembre 2010, 22:20 pm
Un código tan chico te tiene que ocupar menos de 10kb.
Yo no uso ningún IDE, compilo directamente por consola.
Los IDEs te agregan extras para depurarlo.
Intenta compilarlo en limpio directo por consola.


Título: Re: porque al compilar pesa tanto un programa?
Publicado por: APOKLIPTICO en 28 Noviembre 2010, 22:37 pm
No es demasiado problema que el ejecutable sea grande, aparte, siempre podés utilizar UPX para comprimirlo.


Título: Re: porque al compilar pesa tanto un programa?
Publicado por: bomba1990 en 29 Noviembre 2010, 01:02 am
bueno puse ese script porque es el que viene de ejemplo en el codeblocks.  y de verdad lo pongo no porque 978 kb pese mucho(ya no se usan los dikettes) sino porque me parece execisivo comparado cuando compilaba en dev-c++ que no pasaba de 20kb

que compilador ustedes me recomeindan?


Título: Re: porque al compilar pesa tanto un programa?
Publicado por: pucheto en 29 Noviembre 2010, 02:20 am
No tiene nada que ver el IDE que uses para compilar, si tiene que ver el compilador y las opciones que se le pasan a este. Por ejemplo, si lo vas a compilar con informacion de debugging, que tipo de optimizacion usas para compilarlo, si habilitas o no el manejo de excepciones, si alineas o no el codigo, etc..


Título: Re: porque al compilar pesa tanto un programa?
Publicado por: APOKLIPTICO en 29 Noviembre 2010, 02:32 am
Que version de GCC tenés que opciones le pasas? Estas linkeando algun objeto de más?


Título: Re: porque al compilar pesa tanto un programa?
Publicado por: bomba1990 en 29 Noviembre 2010, 04:04 am
yo lo instale y empese a usarlo como vino. no le e echo muchas modificaciones.

y no seeeeeeeeeeeeeeee, esta vaina me enredo, porque en los comandos no aparece nada. hay solo dos en el de debug que aparece -q.
y en release que no tiene el -q ese y ponen -o2 optimize even more(for speed)  y -s (strip al symbol for binaries).



Título: Re: porque al compilar pesa tanto un programa?
Publicado por: Karman en 29 Noviembre 2010, 06:45 am
es por una característica de gcc cuando se utilizan las STL, y es debido a que en este compilador el código del la STL es embebido en el ejecutable final (lo cual no pasa con visual c++ debido a que dichas funcionalidades están en una dll externa), pero no te tiene que importar eso, dado que, al fin y al cabo, ambos pesan lo mismo en memoria (con gcc es un solo módulo, con visual c, son 2 o más)

cita de la página compilador mingw:

Citar
C++ programs using the Standard Template Library (ie/ #include <iostream>) cause a large part of the library to be statically linked into the binary. The need to statically link the stdc++ into the binary is two fold. First MSVCRT.dll does not contain C++ stdlib constructs. Second the legal implications of generating a libstdc++.dll are restricted by the licensing associated with the library. If you wish to keep your file size down use strip to remove debugging information and other verbatim found in the binary.

S2


Título: Re: porque al compilar pesa tanto un programa?
Publicado por: bomba1990 en 29 Noviembre 2010, 17:04 pm
ahhhhhhh, gracias. voy a averiguar porque debe haber una forma de que no lo linkee porque en el futuro tengo ganas de hacer un troyano cuando aprenda mas c++ y me gustaria que fuera mas liviano. pero de todas maneras muchaaas gracias a todos porque ahora entiendo cual es el problema.

aqui cinsegui esta pagina que lo explica muy bien:

http://www.zator.com/Cpp/E1_4_6.htm


Título: Re: porque al compilar pesa tanto un programa?
Publicado por: APOKLIPTICO en 29 Noviembre 2010, 17:55 pm
Ponele las optimizaciones, es raro, porque estoy compilando un programa que linkea un monton de libs, y me pesa 88 k y en debug.
En el modo debug tengo puesta solo la opción x defecto "produce debugging symbols".

En el release, me pesa menos de la mitad.
Tengo puestas las opciones "strip symbols" y "optimize even more".


Título: Re: porque al compilar pesa tanto un programa?
Publicado por: bomba1990 en 29 Noviembre 2010, 19:22 pm
ya lei bien, lo que pasa es que al linkear iostream el compilador linkea el objeto completo, es decir linkea la libreria estandar completa, en cambio si uso stdio.h el programa no pasa de 25kb.

Citar
Why is the compiled executable file so large?

People usually ask this question when they compile a simple program which uses iostreams. The first thing you can do is to add -s to Project Options - Parameters - Linker, but the result may be still too large for your taste. In this case, either try to live with it (it actually doesn't matter so much!), or avoid iostreams (use cstdio), or use another compiler. Also note that there are some exe compressors on the net, e.g. upx.

The reason why iostream increases the size so much is that the linker links entire object files (from inside of libraries) if they contain at least one necessary reference, and the library for iostream is not well separated into small object files. Also, the linker should be able to link only certain sections of the object files (see "--gc-sections"), but this particular feature doesn't work yet on the mingw target (and that affects all libraries and object files).

Tomado de:  Adrian Sandor www14.brinkster.com