Как уменьшить размер генерируемого файла (VC++)

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

Как уменьшить размер генерируемого файла (VC++)

Сообщение dAnIK SeNT » Вс фев 23, 2003 11:54 am

Сабж. Самая простая dll-ка занимает 20 Кб после долгих извращений с настройками компилятора и компоновщика. Хотя в том месте где я надыбал исходник скомпиленный файл весит 4 кб.
Какие настройки посоветуете использовать при компиляции для минимизации генерируемого кода?
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->
dAnIK SeNT
Маршал
 
Сообщений: 5101
Зарегистрирован: Чт мар 28, 2002 7:48 pm
Откуда: яяяп
Пункты репутации: 0

Сообщение ghostwheel » Вс фев 23, 2003 2:28 pm

У тебя VS 6.0 или VS.NET? Или тебя вообще ключи для командной строки интересуют?
ghostwheel
Ст. сержант
 
Сообщений: 44
Зарегистрирован: Пт дек 27, 2002 10:54 pm
Пункты репутации: 0

Сообщение dAnIK SeNT » Вс фев 23, 2003 3:16 pm

2ghostwheel
У меня 6.0 SP5.
Меня интересуют ключи ком. строки, главным образом для линкера, т.к. объектный файл маленький - около 3 Кб, а после компоновки он разрастается до 20 Кб (100% что его можно скомпилить при помощи VC++ в 4 Кб DLL).
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->
dAnIK SeNT
Маршал
 
Сообщений: 5101
Зарегистрирован: Чт мар 28, 2002 7:48 pm
Откуда: яяяп
Пункты репутации: 0

Сообщение ghostwheel » Вс фев 23, 2003 5:46 pm

1) Реши что использовать - статические или динамические библиотеки. Статические увеличат размер твоей программы но уберут зависимость от стандартных run-time DLLек.

2) Проверь что ты переключил конфигуратион из Debug в Release (/DEBUG флаг не должен присутствовать).

3) Проверь что следующие флаги включены (у меня VS.NET но я надеюсь эта часть не поменялась):

/INCREMENTAL: NO (no incremental linking)
/OPT:REF (optimize references)
/OPT:ICF (perform COMDAT folding)

Насколько я помню, остальные оптимизации на размер делаются компилятором, а не линкером.
ghostwheel
Ст. сержант
 
Сообщений: 44
Зарегистрирован: Пт дек 27, 2002 10:54 pm
Пункты репутации: 0

Сообщение dAnIK SeNT » Вс фев 23, 2003 7:38 pm

2ghostwheel
А какие библиотеки используются по умолчанию - статические или динамические? И как мне испоьзовать динамические? Неужели LoadModule-GetProcAddres? Гемор...
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->
dAnIK SeNT
Маршал
 
Сообщений: 5101
Зарегистрирован: Чт мар 28, 2002 7:48 pm
Откуда: яяяп
Пункты репутации: 0

Сообщение ghostwheel » Пн фев 24, 2003 12:15 am

<!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->2ghostwheel
А какие библиотеки используются по умолчанию - статические или динамические? И как мне испоьзовать динамические? Неужели LoadModule-GetProcAddres? Гемор...<!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->

В VS.Net run-time библиотека задается в C/C++ - Code Generation разделе. Допустимые значения которые тебя могут интересовать:

/MT - multi-threaded static run-time library
/ML - single-threaded static
/MD - multi-threaded DLL (MSVCRT.DLL)

Все что от тебя требуется это поставить соответствующий флаг. Кроме того стоит проверить что отключена поддержка MFC (если ты не пользуешься им) и ATL (аналогично). А вообще, если не влом, то открой конфигурацию проекта и читай Help (входит в полный 6-дисковый комплект VS или ставится отдельно (любая версия начиная с Янв-2001 - 3 диска)) для всех установок подряд. Узнаешь очень много интересного <!--emo&:)-->Изображение<!--endemo-->.
ghostwheel
Ст. сержант
 
Сообщений: 44
Зарегистрирован: Пт дек 27, 2002 10:54 pm
Пункты репутации: 0

Сообщение dAnIK SeNT » Пн фев 24, 2003 8:15 am

Проблема решена прописыванием в начале файла
Код: выделить все

#pragma comment(linker, "/opt:NOWIN98")


Размр файла уменьшился с 20 кб до 3,5 кб.
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->
dAnIK SeNT
Маршал
 
Сообщений: 5101
Зарегистрирован: Чт мар 28, 2002 7:48 pm
Откуда: яяяп
Пункты репутации: 0

Сообщение Scalder » Пн фев 24, 2003 8:45 am

2dAnIK SeNT
Это только мне кажеться что NOWIN98 - означает NO WINDOWS 98?
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение dAnIK SeNT » Пн фев 24, 2003 12:09 pm

2Scalder
Не знаю, у меня Win98 нету чтоб проверить <!--emo&:)-->Изображение<!--endemo-->
Буду выкладывать свои приблуды - если вой поднимется, то буду делать 2 версии - для 98 и для NT.
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->
dAnIK SeNT
Маршал
 
Сообщений: 5101
Зарегистрирован: Чт мар 28, 2002 7:48 pm
Откуда: яяяп
Пункты репутации: 0

Сообщение Scalder » Пн фев 24, 2003 12:57 pm

2dAnIK SeNT
у меня стоит на VM Ware(чего и тебе советую) если хошь могу и прогу скинуть...
(виртуальный комп если не в курсе)
<!--coloro:green--><span style="color:green"><!--/coloro-->А что я не так сказал?<!--colorc--></span><!--/colorc-->
<!--coloro:red--><span style="color:red"><!--/coloro-->А ты как думал? Конечно это ИМХО<!--colorc--></span><!--/colorc-->

<!--coloro:red--><span style="color:red"><!--/coloro-->>В каждом системном администраторе есть что-то от Бога.<!--colorc--></span><!--/colorc-->
В каждом программисте есть что-то от Бога для Бога. :-р
<a href="http://www.erepublik.com/en/referrer/mrScalder" target="_blank">Изображение</a>
Scalder
Генерал-майор
 
Сообщений: 2587
Зарегистрирован: Пн апр 08, 2002 10:21 am
Пункты репутации: 0

Сообщение ghostwheel » Пн фев 24, 2003 1:40 pm

<!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->2dAnIK SeNT
Это только мне кажеться что NOWIN98 - означает NO WINDOWS 98?<!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->

Если память не изменяет, то этот флаг отключает выравнивание кода по 4Kb границе. (Согласно Microsoft это повышает производительность под Win98).
ghostwheel
Ст. сержант
 
Сообщений: 44
Зарегистрирован: Пт дек 27, 2002 10:54 pm
Пункты репутации: 0

Сообщение dAnIK SeNT » Пн фев 24, 2003 2:40 pm

Короче, под Win98 пахать будет, хотя и чуть медленнее.
2Scalder
Не надо пока... На крайняк всегда могу к соседу зайти <!--emo&:)-->Изображение<!--endemo-->
яНЯЕД ОН СОПЪФЙЕ: Athlon 64 X2 5200+ @2,86GHz / nF 570 SLI (ASUS M2N SLI Deluxe) / 4 Gb RAM (4x1Gb Kingston) / 2,9Tb SATAII (0,50+0,64+0,75+1,00Tb WD) / ASUS 8800 GTS512 / 2x NEC-Optiarc AD-7173 / Thermaltake ToughPower 650W / 2x30W Microlab Solo-2 / 20" LCD Benq FP202W (wide) / openSUSE 11.1 / KDE 4.2.1
<!--coloro:Navy--><span style="color:Navy"><!--/coloro-->оН БЯЕЛ БНОПНЯЮЛ - Б email. б ICQ ОНЪБКЪЧЯЭ ПЮГ Б ОНКЦНДЮ.<!--colorc--></span><!--/colorc-->
dAnIK SeNT
Маршал
 
Сообщений: 5101
Зарегистрирован: Чт мар 28, 2002 7:48 pm
Откуда: яяяп
Пункты репутации: 0


Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

cron