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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2010, 08:00   #1
dimorik
Пользователь
 
Регистрация: 23.08.2008
Сообщений: 51
По умолчанию Можно ли урезать еще....

Ребята, такой вопрос: Создаю пустой проект (VS C++) , добавляю файл *.cpp кидаю в него следующий код:

#include "windows.h"

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nShowCmd)
{


return 0;
}

потом собираю проект. Получается экзешник размером 40.5 кб. Я так понимаю, что весь "вес" из-за подключенного "windows.h". так? хотя я не уверен. Так можно ли как-то уменьшить его!? Я так думаю не для каждой же программы этот "windows.h" используется полностью.. На API можно писать довольно компактные программки.. т.е. 40.5 кб уже как-то накладно... Может кто занимался подобными экспериментами? Просветите!
dimorik вне форума Ответить с цитированием
Старый 20.03.2010, 08:59   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Я так понимаю, что весь "вес" из-за подключенного "windows.h". так?
В хедерах только описание, они веса не прибавляют (за исключение шаблонов и #pragma lib).

А подобными "эксперементами" занималась куча людей, что подтверждает гугл. По теме: отказ от CRT и его стаба, вызов апи функций, мерж секций (если разделение не нужно).
p51x вне форума Ответить с цитированием
Старый 20.03.2010, 10:38   #3
kogemrka
Форумчанин
 
Аватар для kogemrka
 
Регистрация: 08.01.2010
Сообщений: 165
По умолчанию

Товарищ, зачем тебе меньший размер? Признайся, ты собрался написать вирус или троян? ;-)

Вообще, 40,5 кбайт в твоём случае занимает множество "лишних" вещей. К примеру стандартные С/C++ библиотеки, которые линкуются к проекту, поддержка обработки исключений (если вы пишете на C++) и много всего другого. Теоретически можно от этого отказаться. В WinAPI есть функции, заменяющие практически всё, что есть в стандартных библиотеках. Практически - заниматься такой оптимизацией по размеру нет смысла, как правило.

На всякий случай:

http://blog.f5soft.com/umenshenie-ra...-studio-part1/
http://blog.f5soft.com/umenshenie-ra...-studio-part2/
kogemrka вне форума Ответить с цитированием
Старый 21.03.2010, 05:47   #4
dimorik
Пользователь
 
Регистрация: 23.08.2008
Сообщений: 51
По умолчанию

Спасибо за ответы и за сылки.. небыл тут еще ..
dimorik вне форума Ответить с цитированием
Старый 21.03.2010, 17:39   #5
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

находил как-то сайт по оптимизации программ, так там программу на делфи с одной функцией показа messageBox урезали до 3 (!!!) килобайт.
Вот это по-настоящему оптимизация!
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 21.03.2010, 18:02   #6
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

http://blog.f5soft.com/umenshenie-ra...-studio-part1/

по этой ссылке сделал как там написано, даже при подключении windows.h и вызова апи функций размер exe всего 1 КБ (IDE - MS VS 2008 Professional)!!!

вот это да!
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 21.03.2010, 18:06   #7
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

dimorik, переключите вид сборки с Debug на Release и получите exe в 16 кб, если не ошибаюсь. Только Clean лучше сделать перед компиляций
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 21.03.2010, 18:22   #8
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

IDE - MS VS 2008 Professional, все настройки компилятора\компоновщика по умолчанию
Код:
#include "windows.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
	MessageBoxA(GetForegroundWindow(), "ss", "ss", MB_ICONINFORMATION);
	return 0;
}
размер программки:
в режиме Release - всего 7,5 КБ
в режиме Debug - 29.5 КБ
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 21.03.2010, 19:00   #9
dimorik
Пользователь
 
Регистрация: 23.08.2008
Сообщений: 51
По умолчанию

Цитата:
IDE - MS VS 2008 Professional, все настройки компилятора\компоновщика по умолчанию
Код:


#include "windows.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
MessageBoxA(GetForegroundWindow(), "ss", "ss", MB_ICONINFORMATION);
return 0;
}

размер программки:
в режиме Release - всего 7,5 КБ
в режиме Debug - 29.5 КБ


Ну не все так безоблачно! Вы попробуйте этот экзешник на другом компе запустить, на котором не установлена VS. Не выйдет!!!
dimorik вне форума Ответить с цитированием
Старый 22.03.2010, 00:09   #10
kogemrka
Форумчанин
 
Аватар для kogemrka
 
Регистрация: 08.01.2010
Сообщений: 165
По умолчанию

Кстати, на заметку, exe-файл можно ещё сжать upx`ом после компиляции. Или любым другим упаковщиком.

А ещё ты так и не дал ответ, зачем тебе это нужно вообще?
kogemrka вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для какой версии можно еще написать Михаил Юрьевич Общие вопросы Delphi 6 30.12.2007 13:48
RichEdit. как можно вставлять картинку туда? как можно Скрол програмно вниз двигать? Svop Компоненты Delphi 7 28.11.2006 21:07