Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Delphi vs Lazarus (https://www.clubdelphi.com/foros/showthread.php?t=78199)

santi33a 28-03-2012 16:59:31

Delphi vs Lazarus
 
Hola sigo preguntando, tuve la curiosidad de compilar un proyecto en delphi 2010 y otro en lazarus 0.9.30.2, los cuales solo tienen un formulario vacio, sin embargo existe una diferencia enorme en el tamño del ejecutable

Delphi 817 KB
Lazarus 18 MB

Saben por qué? :eek:
Gracias.

rretamar 28-03-2012 19:10:35

Es la pregunta del millón que todos nos hicimos alguna vez. :p

http://wiki.lazarus.freepascal.org/L...ries_so_big.3F

http://wiki.lazarus.freepascal.org/Size_Matters

ecfisa 28-03-2012 20:17:07

Hola.

El tamaño del ejecutable en Delphi se reduce drásticamente al quitar la inclusión de packages.
Valores obtenidos con Delphi 7:
Código:

Project1.exe (con runtime packages) 369.152 bytes
Project1.exe (sin runtime packages)  16.896 bytes

Me pregunto si esa diferencia tán marcada que obtuviste, en parte pueda deberse a eso...

No soy conocedor de Lazarus y estoy interesado en comenzar a utilizarlo. Así que buscando más sobre el tema del tamaño de los ejecutables, me llamó la atención estos enlaces en los que dicen sucederle lo contrario:además se abordaron otros temas que desconocía y me resultaron interesantes.

Saludos.

Edito: Cometí un error donde dije "sucederle lo contrario", quise decir "sucederle lo mismo", no sé en que tengo la cabeza...:o

santi33a 28-03-2012 20:42:09

Negativo, está con sus paquetes, esa opción ya la conozco, por eso te decía de la diferencia, sino no estarían en igualdad de condiciones, espero que en un proyecto mas complicado la diferencia no sea tan grande.
;)
Y gracias

mightydragonlor 28-03-2012 21:10:07

La razón del tamaño del ejecutable es que Lazarus carga por defecto una cantidad de información para la compilación, una vez realizado tu programa y queriendo distribuirlo, generas un ejecutable quitando esas opciones y listo, queda pesando casi lo mismo que el que genera delphi, o si te da pereza puedes usar Strip y Upx.

roman 28-03-2012 21:20:40

Esto último es muy relativo. Delphi, por defecto, también guarda información para depuración y aún así su ejecutable no es tan grande como el de Lázarus. Yo seguí los pasos que dan en el primer enlace que puso rretamar y no disminuye ni un byte el tamaño.

// Saludos

mightydragonlor 28-03-2012 21:31:05

Esta es la prueba que acabo de hacer:
Proyecto con 1 formulario en blanco
Sin optimizaciones = 12.669KB
Con optimizaciones = 1.607KB
Desmarco generar información para la depuración
Marco eliminar símbolos del ejecutable, enlazado inteligente, Mas pequeño en lugar de mas rápido.

Resumen, se puede reducir más si usas Strip y Upx, o marcando y desmarcando otras opciones, pero no recuerdo cuales mas en este momento.
Saludos.

santi33a 30-03-2012 20:27:59

mightydragonlor puedes decirme cuales fueron los pasos para lograr reducir el tamaño de esos fichero pues yo no lo he logrado. :confused:

Santiago

mightydragonlor 30-03-2012 21:51:49

Cita:

Empezado por mightydragonlor (Mensaje 428712)
Desmarco generar información para la depuración
Marco eliminar símbolos del ejecutable, enlazado inteligente, Mas pequeño en lugar de mas rápido.

Esto lo encuentras en Opciones de proyecto->Opciones del Compilador->Enlazado, allí encuentras las opciones. =)
Saludos.

roman 30-03-2012 22:31:26

Pero, como dije antes, en el caso de delphi, no tienes que quitarle la depuración para que el ejecutable tenga un tamaño razonable. En el caso de lázarus, esa es la única opción con la cual reduces considerablemente el tamaño, las otras sólo unos cuantos bytes.

// Saludos

mightydragonlor 31-03-2012 04:53:04

Esto realmente no viene al caso, ya que Lazarus solo es el IDE, FreePascal el compilador y GDB el depurador, no es como Delphi que tiene un solo paquete con todo super optimizado, el depurador de Lazarus no tiene muchas cosas que si encuentras en delphi, pero igual funciona y logra su cometido, pero una de las razones por la que el tamaño de los ejecutables son tan grandes es precisamente que GDB necesita muchas cosas dentro del .exe y en unos formatos específicos, si compresiones y demás cosas, ya que como este ha sido un desarrollo independiente de el de Lazarus, no es como el equipo de desarrollo quisiera, creo que por ahí estaban haciendo un depurador, sino estoy mal era el mismo equipo de Lazarus, que corrija todas estas cosas y esté mas integrado con el IDE, además de ser mucho mejor, algo mas parecido al de Delphi y Visual Studio, pero solo hasta ahí sé.

roman 31-03-2012 20:56:27

Caray. Pues lo que viene al caso es que se obtiene un ejecutable gigantezco. Las razones ya me parecen lo de menos.

// Saludos

mightydragonlor 01-04-2012 19:43:19

Cita:

Empezado por roman (Mensaje 429026)
Caray. Pues lo que viene al caso es que se obtiene un ejecutable gigantezco. Las razones ya me parecen lo de menos.

// Saludos

Si, pero es un ejecutable de depuración y no de ejecución, es tanto así que si abres el ejecutable con editor hexadecimal puedes obtener todos los nombres de las clases y sus métodos.

Casimiro Notevi 05-04-2012 02:13:34

Sobre el tamaño de los ejecutables:

Cita:

Empezado por lazarus
Why are the generated binaries so big?

The binaries are big because they include a lot of debug information necessary for using gdb (GNU Debugger).
The compiler has an option to remove the debug information from the executable (-Xs), but due to a bug in the compiler (version 2.0.2 and earlier), this doesn't work correctly. It has been fixed in version 2.0.4 and later of the compiler.
You can use a program called "strip" to remove the debug symbols from the executable file. It is located under lazarus dir lazarus\fpc\2.4.2\bin\i386-win32\.
Just type "strip --strip-all <your executable file with path>" on the command line.
If you want to make your program even smaller, you should try UPX too. UPX is a very good exe compressor. It includes no memory overhead due to in-place decompression. It also has a very fast decompression (~10 MB/sec on an Pentium 133).
To use upx just type "upx <your executable file with path>" on the command line.
after using both strip and upx a simple GUI Lazarus program gets:
  • ~ 700kb on Linux
  • ~ 420kb on Windows
A more detailed answer with the drawbacks of using UPX is given on Size Matters.
It's also important to note that the hello world lazarus software already includes a huge amount of features. It includes:
  • XML handling library
  • Image handling library for png, xpm, bmp and ico files
  • Almost all widgets from the Lazarus Component Library
  • All of the Free Pascal Runtime Library
So it's very big, but it already includes almost everything a real world non-trivial app will need.
Lazarus executable size starts big, but grows very slowly, because of the Free Pascal compiler and the way lazarus forms operate. A c++ project (just an example, but applies to other languages / tools too) starts very small on the hello world, but quickly grows exponentially when you need features to write a non-trivial application.

Quick guide to Lazarus/FPC application size reduction (tested with Lazarus 0.9.26)
  • 1. Project|Compiler Options|Code|Smart Linkable (-CX) -> Checked
  • 2. Project|Compiler Options|Linking|Debugging| Uncheck all except
Strip Symbols From Executable (-Xs) -> Checked
  • 3. Project|Compiler Options|Linking|Link Style|Link Smart (-XX) -> Checked
The most important items seem to be 2. For a simple application the executable size should now be 1-3 MB instead of 15-20 MB. At this point you can also try: Project|Compiler Options|Code|Optimizations|smaller rather than faster -> Checked (Warning: this might decrease performance)
  • 4. (Optional) Run UPX <your_executable> to compress your binary by an additional factor of 2-3 (Warning: as indicated above, there are drawbacks to using UPX).
Chart of default sizes for an empty Application with various settings and operating systems
Well I ran tests I did on Lazarus 0.9.29 with FPC 2.4 (FPC 2.2.4 with Windows). Optimized compiler mean using the advices above but without using UPX. Default Lazarus means as installed from package/setup. LCL without debug informations mean after rebuilding Lazarus IDE and LCL without debug informations (-g-).

Default Lazarus LCL without debug informations Ubuntu 64 bits / Lazarus 64 bits
Default application 13,4 Mb 7,5 Mb / 8 Optimized compiler 4,4 Mb 2,70 Mb (0.29svn FPC2.4 2,5)
Ubuntu 32 bits / Lazarus 32 bits
Default application 19,6 Mb 5,7 Mb Optimized compiler 2,9 Mb 1,6 Mb
Windows XP 32 bits / Lazarus 32 bits
Default application 11,8 Mb 2,14 Mb Optimized compiler 1,62 Mb 1,50 Mb
Windows Seven 64 bits / Lazarus 64 bits
Default application 12,3 Mb 3,20 Mb Optimized compiler 2,14 Mb 2,16 Mb


mightydragonlor 07-04-2012 21:26:12

Gracias por el dato Casimiro, si bien es verdad que Delphi produce exe's pequeños, pos así Lazarus los produzca grandes, no les veo mayor importancia, ya que se puede reducir =)

santi33a 09-04-2012 15:17:44

Cita:

Quick guide to Lazarus/FPC application size reduction (tested with Lazarus 0.9.26)
1. Project|Compiler Options|Code|Smart Linkable (-CX) -> Checked
2. Project|Compiler Options|Linking|Debugging| Uncheck all except
Strip Symbols From Executable (-Xs) -> Checked
3. Project|Compiler Options|Linking|Link Style|Link Smart (-XX) -> Checked
The most important items seem to be 2. For a simple application the executable size should now be 1-3 MB instead of 15-20 MB. At this point you can also try: Project|Compiler Options|Code|Optimizations|smaller rather than faster -> Checked (Warning: this might decrease performance)
Seguí todas estas instrucciones y nada, no logré que bajara el tamaño del ejecutable :confused:

Cita:

4. (Optional) Run UPX <your_executable> to compress your binary by an additional factor of 2-3 (Warning: as indicated above, there are drawbacks to using UPX).
No me parece valida esta opción, no es lo mismo comprimir el código a que me genere un código mas eficiente es decir que haga lo mismo con menos instrucciones. con el UPX cualquiera baja su tamaño ya sea en delphi como en lazarus.

Casimiro Notevi 09-04-2012 15:46:21

Cita:

Empezado por santi33a (Mensaje 429598)
No me parece valida esta opción, no es lo mismo comprimir el código a que me genere un código mas eficiente es decir que haga lo mismo con menos instrucciones. con el UPX cualquiera baja su tamaño ya sea en delphi como en lazarus.

Que el ejecutable sea más o menos grande no quiere decir que sea más o menos eficiente.
El ejecutable generado en lazarus es más grande, como ya se ha indicado, porque incluye mucha más (o de distinta forma) información para depuración que el que necesita delphi con su compilador, que están hechos el uno para el otro, sin embargo, lazarus usa un deparador externo (de terceros) que sirve para otros lenguajes.

Lo de comprimir con upx, desde luego, ahí tienes razón.

alsn 27-04-2012 04:22:54

Hola, yo solo marco:
-Visualizar números de líneas en los errores de tiempo de ejecución en trazados inversos (-gl)
-Usar archivo externo de simbolos de depuración para gdb (-Xg)

Con esto, para un formulario en blanco, pasa de 13.384 KB a 1.608 KB, sin perder la depuración.

Un saludo

Casimiro Notevi 27-04-2012 11:06:49

Gracias por tu aportación.
Y bienvenido a clubdelphi :)

alsn 28-04-2012 05:01:32

Muchas gracias a vosotros. Aunque sin registrarme, he visitado mucho esta página, y me ha sido de gran utilidad.


La franja horaria es GMT +2. Ahora son las 10:31:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi