porque al compilar pesa tanto un programa?

Iniciado por bomba1990, 28 Noviembre 2010, 20:05 PM

0 Miembros y 1 Visitante están viendo este tema.

Karman

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:

CitarC++ 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

bomba1990

#11
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
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

APOKLIPTICO

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".
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

bomba1990

#13
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.

CitarWhy 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
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve