Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2016, 16:13   #1
R_G
Форумчанин
 
Регистрация: 22.11.2010
Сообщений: 114
По умолчанию Почему разный размер файлов при компиляции?

Добрый день!
Есть код, который выводит простое окно в windows:
PHP код:
#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif

#include <tchar.h>
#include <windows.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWNDUINTWPARAMLPARAM);

/*  Make the class name into a global variable  */
TCHAR szClassName[ ] = _T("TEST");

int WINAPI WinMain (HINSTANCE hThisInstance,
                     
HINSTANCE hPrevInstance,
                     
LPSTR lpszArgument,
                     
int nCmdShow)
{
    
HWND hwnd;               /* This is the handle for our window */
    
MSG messages;            /* Here messages to the application are saved */
    
WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    
wincl.hInstance hThisInstance;
    
wincl.lpszClassName szClassName;
    
wincl.lpfnWndProc WindowProcedure;      /* This function is called by windows */
    
wincl.style CS_DBLCLKS;                 /* Catch double-clicks */
    
wincl.cbSize sizeof (WNDCLASSEX);

    
/* Use default icon and mouse-pointer */
    
wincl.hIcon LoadIcon (NULLIDI_APPLICATION);
    
wincl.hIconSm LoadIcon (NULLIDI_APPLICATION);
    
wincl.hCursor LoadCursor (NULLIDC_ARROW);
    
wincl.lpszMenuName NULL;                 /* No menu */
    
wincl.cbClsExtra 0;                      /* No extra bytes after the window class */
    
wincl.cbWndExtra 0;                      /* structure or the window instance */
    /* Use Windows's default colour as the background of the window */
    
wincl.hbrBackground = (HBRUSHCOLOR_BACKGROUND;

    
/* Register the window class, and if it fails quit the program */
    
if (!RegisterClassEx (&wincl))
        return 
0;

    
/* The class is registered, let's create the program*/
    
hwnd CreateWindowEx (
           
0,                   /* Extended possibilites for variation */
           
szClassName,         /* Classname */
           
_T("TEST"),       /* Title Text */
           
WS_OVERLAPPEDWINDOW/* default window */
           
CW_USEDEFAULT,       /* Windows decides the position */
           
CW_USEDEFAULT,       /* where the window ends up on the screen */
           
544,                 /* The programs width */
           
375,                 /* and height in pixels */
           
HWND_DESKTOP,        /* The window is a child-window to desktop */
           
NULL,                /* No menu */
           
hThisInstance,       /* Program Instance handler */
           
NULL                 /* No Window Creation data */
           
);

    
/* Make the window visible on the screen */
    
ShowWindow (hwndnCmdShow);

    
/* Run the message loop. It will run until GetMessage() returns 0 */
    
while (GetMessage (&messagesNULL00))
    {
        
/* Translate virtual-key messages into character messages */
        
TranslateMessage(&messages);
        
/* Send message to WindowProcedure */
        
DispatchMessage(&messages);
    }

    
/* The program return-value is 0 - The value that PostQuitMessage() gave */
    
return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwndUINT messageWPARAM wParamLPARAM lParam)
{
    switch (
message)                  /* handle the messages */
    
{
        case 
WM_DESTROY:
            
PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            
break;
        default:                      
/* for messages that we don't deal with */
            
return DefWindowProc (hwndmessagewParamlParam);
    }

    return 
0;

Откомпилировал с помощью mingw g++ в консоли cmd и в code::blocks. Размер файлов получился разный. Подскажите, пожалуйста, почему так.
Изображения
Тип файла: png sizes.png (2.9 Кб, 89 просмотров)
R_G вне форума Ответить с цитированием
Старый 24.03.2016, 16:31   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

1. разные настройки
2. дебаг/релиз версия
3. не сделали strip
...
p51x вне форума Ответить с цитированием
Старый 25.03.2016, 08:42   #3
R_G
Форумчанин
 
Регистрация: 22.11.2010
Сообщений: 114
По умолчанию

Погуглив немногог, попробовал скомпилить с помощью g++ с флагом -s. Размеры стали идентичны.) Похоже code::blocks релиз делает с данным флагом. Спасибо.
Появились еще вопросы.
1. Вы писали:
Цитата:
2. дебаг/релиз версия
Можно ли считать компиляцию с флагом -s релиз версией?
2. Можно ли еще уменьшить размер откомпилиного файла?)
R_G вне форума Ответить с цитированием
Старый 25.03.2016, 08:54   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Можно ли считать компиляцию с флагом -s релиз версией?
Нет. Обычно для релиз версии дефайнятся/андефайнятся какие-то флаги, добавляется оптимизация, проверки, ...

Цитата:
Можно ли еще уменьшить размер откомпилиного файла?
Включить оптимизацию по размеру, отказаться от стандартной либы, порезать заголовок, ... только зачем?
p51x вне форума Ответить с цитированием
Старый 25.03.2016, 12:17   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,770
По умолчанию

Цитата:
Сообщение от R_G Посмотреть сообщение
2. Можно ли еще уменьшить размер откомпилиного файла?)
Можно попробовать с PE Tool, но совместимость с компиляторами/компоновщиками GNU пока не заявлена. Они что-то не по стандарту в файлы пихают, в отличие от Microsoft и Borland/Embarcadero.
Vapaamies вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему уменьшился максимальный размер загружаемых файлов? Вадим Мошев О форуме и сайтах клуба 1 03.08.2013 22:51
Большой размер установочного фаила в delphi xe4 при компиляции под ios Flik Общие вопросы Delphi 5 24.05.2013 14:13
Разный размер символов в EDIT Trust_357 Win Api 2 20.04.2012 18:33