![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Dаedra |
|
||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 20.2.2009 Репутация: нет Всего: нет |
Столкнулся с небольшой проблемой: даже самая маленькая программа из 5ти операторов занимает на диске по 160 кб. Например, написал такой код в Студии 2006:
После компиляции получил экзешник размером 160 кб. Как мне кажется, в экзешник компилируется вся включаемая библиотека stdio и все библиотеки, которые она подключает директивой include. И вот хочется узнать, можно как-то уменьшить размер кода с помощью ключей компилятора или линкера? Искал в сети примеры такой оптимизации, натолкнулся на скомпилированный небольшой сервер и его исходник. Сам экзешник весит всего 9 кб, никаким пакером, кажется, не упакован. В исходнике был такой заголовок:
И в статье, где была ссылка на этот пример, было описание методов оптимизации через pragma. Но даже скопировав этот заголовок в свою программу, я не только не уменьшил ее размер, но еще и увеличил ее на 40 кб. К тому же программа не хотела компилироваться, пока я не вырезал #pragma comment(linker,"/NODEFAULTLIB"). Пакеры использовать не хочу, потому что они чаще всего сжимают только размер исполняемого файла, а в оперативке программа разворачивается во весь свой размер. Можно как-то самому уменьшить размер генерируемого кода средствами Студии, чтобы приблизиться к размеру ассемблерных программ? |
||||
|
|||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
достаточно #pragma comment(linker,"/entry:main")
|
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 2 Всего: 23 |
||||
|
||||
Dаedra |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 20.2.2009 Репутация: нет Всего: нет |
у меня после этого программа стала рушиться через секунду после запуска, но её объем так и не уменьшился |
|||
|
||||
Dаedra |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 20.2.2009 Репутация: нет Всего: нет |
Кстати, может, я что-то не так делаю, но я скачал WCRT, файл wcrt.lib кинул к другим либам, в папке хедеров создал папку wcrt и в нее скинул все хедеры библиотеки wcrt, в программе подключил stdio так:
то есть, хедеры находятся относительно стандартной папки так: Include/wcrt/stdio.h, но размер так и не уменьшился. может, что-то еще нужно сделать? |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
||||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Может лучше выбрать другой компилятор? Например gcc.
|
|||
|
||||
SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 2 Всего: 23 |
Dаedra, wcrt используем так:
- говорил линкеру, что мы её используем - говорим что мы игнорим стандартную crt |
|||
|
||||
Echo78 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 21.3.2006 Репутация: нет Всего: нет |
Это было одной из причин, по которой я выбрал gcc, теперь в нём и работаю. ![]() В нём размер exe-файла после strip становится маленьким... |
|||
|
||||
DrHex |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 2.5.2009 Репутация: нет Всего: нет |
А ресурсы ручками прикручивать? Так а смысл? Размер не особо уменьшится. Если не хочется заниматся формированием исполняемого файла вручную, то просто упаковывай файл Упаковщики UPX, Aspack, PeCompact(Это не реклама, UPX открый для использования и работает на многих ОС) ..... --------------------
google.com и это все. |
|||
|
||||
chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
Dаedra, чот сказки какие-то
специально залез на машину на которой стоит VS2003 - на ней ваш пример собирается в ехе размером 44к релизная версия. ЗЫ да и вообще считаю рано вы смотрите на размер бинарника |
|||
|
||||
chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
с другим компилятором мы нормально сможем компилять под винду? ЗЫ например COM server |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
chaos,
![]() -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
а при чем тут ресурсы и точка входа? размер уменьшается как раз на размер CRT, до единиц килобайт получается 0x400 байт на заголовок, выравнивание 0х200*(число секций) , а остальное - сколько кода напишешь - столько и будет |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |