SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Eternal Idol en Miércoles 19 de Abril de 2006, 16:53

Título: Potencia De Vc++
Publicado por: Eternal Idol en Miércoles 19 de Abril de 2006, 16:53
En otro foro alguien dijo que Pascal (Delphi) generaba ejecutables mucho mas pequeños y rapidos que VC++. Espero que esto lo contradiga:

simple.cpp:
Código: Text
  1.  
  2. #include <windows.h>
  3.  
  4. #define mainDlg 101
  5. #define okButton 500
  6. HWND mainDlgHandle;
  7.  
  8. int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
  9.  
  10. int RealEntry()
  11. {
  12.   return WinMain(GetModuleHandle(0), 0, 0, 0);
  13. }
  14.  
  15. INT_PTR CALLBACK mainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
  16. {
  17.   HICON mainIcon = 0;
  18.   switch (uMsg)
  19.   {
  20.     case WM_CLOSE:
  21.       EndDialog(hwndDlg, wParam);
  22.     return TRUE;
  23.  
  24.     case WM_INITDIALOG:
  25.       mainDlgHandle = hwndDlg;
  26.       mainIcon = LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(101));
  27.       SetClassLong(mainDlgHandle, GCL_HICON, (LONG)mainIcon);
  28.       DestroyIcon(mainIcon);
  29.     break;
  30.  
  31.     case WM_COMMAND:
  32.       switch (LOWORD(wParam))
  33.       {
  34.         case okButton:
  35.           SendMessage(hwndDlg, WM_CLOSE, 0, 0);
  36.         break;
  37.       }
  38.     break;
  39.   }
  40.   return 0;
  41. }
  42.  
  43. int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  44. {
  45.   DialogBox(hInstance, MAKEINTRESOURCE(mainDlg), 0, mainDlgProc);
  46. }
  47.  
  48.  

El script de recursos, about.rc:

Código: Text
  1.  
  2. #include <windows.h>
  3.  
  4. 101 DIALOGEX 0, 0, 229, 50
  5. STYLE DS_FIXEDSYS | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
  6. CAPTION "About ..."
  7. LANGUAGE LANG_SPANISH, 0x1
  8. FONT 8, "MS SHELL DLG", 0, 0, 1
  9. {
  10.    CONTROL "Programa de ejemplo v0.1", 0, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 7, 12, 91, 11
  11.    CONTROL "Aceptar", 500, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 157, 7, 60, 14
  12. }
  13.  
  14. 101 ICON MAINICON.ico
  15.  
  16.  

Si ponemos un icono de 1024 bytes obtenemos con estas lineas un ejecutable de 3072 bytes:
rc about.rc
cl /c simple.cpp
link simple.obj /NODEFAULTLIB user32.lib kernel32.lib /entry:RealEntry about.res /merge:.rdata=.text
Título: Re: Potencia De Vc++
Publicado por: Eternal Idol en Miércoles 19 de Abril de 2006, 17:02
Un hello world de consola de 1024 bytes:

Código: Text
  1.  
  2. #include <windows.h>
  3.  
  4. size_t strlen(char *cadena)
  5. {
  6.   char *ptr = cadena;
  7.   while(*ptr++);
  8.   return ptr - cadena;
  9. }
  10.  
  11. void main()
  12. {
  13.   HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE);
  14.   char holas[] = "hola mundo";
  15.   DWORD written = 0;
  16.   WriteFile(stdout, holas, strlen(holas), &written, 0);
  17. }
  18.  
  19.  

cl /c hello_std.cpp
link link hello_std.obj /NODEFAULTLIB /entry:main /merge:.rdata=.text kernel32.lib
Título: Re: Potencia De Vc++
Publicado por: Eternal Idol en Miércoles 19 de Abril de 2006, 17:02
Un "hello world" de Windows, 1024 bytes tambien:

Código: Text
  1.  
  2. extern "C" __stdcall MessageBoxA(unsigned int, char*, char*, unsigned
  3.  
  4. int);
  5.  
  6. void main()
  7. {
  8.   MessageBoxA(0, "HOLA", "DESDE C", 0);
  9. }
  10.  
  11.  

cl /c thola.cpp
link thola.obj /NODEFAULTLIB /entry:main /merge:.data=.text /merge:.rdata=.text /subsystem:windows user32.lib
Título: Re: Potencia De Vc++
Publicado por: JuanK en Miércoles 19 de Abril de 2006, 17:08
Citar
En otro foro alguien dijo que Pascal (Delphi) generaba ejecutables mucho mas pequeños y rapidos que VC++.

Pero en todo caso se supone que el tamaño y velocidad del codigo de maquina generado depende del compilador y de la manera en que este se use y no del lenguaje propiamente, sobre todo con programas sencillos en el nivel que has mostrado no?
Título: Re: Potencia De Vc++
Publicado por: Eternal Idol en Miércoles 19 de Abril de 2006, 17:10
Cita de: "JuanK"
Citar
En otro foro alguien dijo que Pascal (Delphi) generaba ejecutables mucho mas pequeños y rapidos que VC++.

Pero en todo caso se supone que el tamaño y velocidad del codigo de maquina generado depende del compilador y de la manera en que este se use y no del lenguaje propiamente, sobre todo con programas sencillos en el nivel que has mostrado no?
Delphi es un compilador especifico y VC++ otro. Por supuesto que la capacidad del programador para usar sus herramientas tiene tambien que ver.
Título: Re: Potencia De Vc++
Publicado por: JuanK en Miércoles 19 de Abril de 2006, 18:02
:blink: Es cierto no lei bien la pregunta, y respecto a delphi no sabia que era comlpilador, crei que era o tra forma de referirce a object pascal.

thanks  :o
Título: Re: Potencia De Vc++
Publicado por: Eternal Idol en Miércoles 19 de Abril de 2006, 18:18
Cita de: "JuanK"
:blink: Es cierto no lei bien la pregunta, y respecto a delphi no sabia que era comlpilador, crei que era o tra forma de referirce a object pascal.

thanks  :o
Delphi es, efectivamente, el lenguaje que antes se llamaba Object Pascal pero tambien es el compilador que vende Borland, como el de C++ que vende Microsoft es el VC++.
Título: Re: Potencia De Vc++
Publicado por: x.cyclop en Viernes 21 de Abril de 2006, 04:17
No entiendo. ¿Qué tiene que ver Delphi? El Dev-C++ está hecho en Delphi, pero eso no importa, es simplemente el IDE, el trabajo grande lo hace el compilador, MinGw.  :blink:  :unsure:
Título: Re: Potencia De Vc++
Publicado por: Geo en Viernes 21 de Abril de 2006, 04:59
Cita de: "X.Cyclop"
No entiendo. ¿Qué tiene que ver Delphi? El Dev-C++ está hecho en Delphi, pero eso no importa, es simplemente el IDE, el trabajo grande lo hace el compilador, MinGw.  :blink:  :unsure:
El tema empezó por una comparación del tamaño de ejecutables generados por Delphi contra los generados con VC++.

No he usado Delphi lo suficiente, pero la única prueba de tamaño que hice fué generar un proyecto vacío y crear el ejecutable, por supuesto que salía más grande pues no configuré ninguna opción para optimizarlo :P.

Saludos,
José Jorge (Geo).
Título: Re: Potencia De Vc++
Publicado por: Eternal Idol en Viernes 21 de Abril de 2006, 10:04
Cita de: "X.Cyclop"
No entiendo. ¿Qué tiene que ver Delphi? El Dev-C++ está hecho en Delphi, pero eso no importa, es simplemente el IDE, el trabajo grande lo hace el compilador, MinGw.  :blink:  :unsure:
Es exactamente lo que te dijo Geo. Mas que nada lo que queria hacer es DESMENTIR categoricamente que Delphi pudiera generar ejecutables mas chicos que VC++.

En la discucion en cuestion el siniestro personaje afirmo esto basandose en un hello world y yo entonces opte por, evidentemente usando las facilidades de VC++, generar un hello world de 1024 bytes. Como me supuse no logro generar nada ni remotamente tan chico con Delphi. Yo no digo que no se pueda, tal vez pueda igualarlo, lo que sostengo es que su afirmacion de que VC++ genera ejecutables de mayor tamaño (e inficientes dice, juaz) que Delphi es totalmente falsa. El problema lo tiene el por ser incapaz de sacarle todo el provecho posible a una herramienta tan versatil, flexible y potente como VC++.
Título: Re: Potencia De Vc++
Publicado por: x.cyclop en Viernes 21 de Abril de 2006, 18:24
Ah, ahora sí. Gracias. :kicking: