Оптимизация под MS VC++ Express

Список разделов Аудиоплеер foobar2000 Программирование foobar2000

Описание: Для программистов, пищущих плагины для foobar2000. SDK и обмен опытом

Сообщение #1 zencd » 22.10.2006, 15:07

Я менял настройки оптимизации и С++, и линкера, ничего не менялось - размер дллки оставался тем-же самым вплоть до байта(!). Это из-за того что Express Edition? Вообще размер получился 90кб; и это при том что в нём всего 170 строк. В проект у меня добавлены gdi32.lib user32.lib comdlg32.lib

А в библиотеке MS Detours 7000 строк, и она умещается в 4096 байт (почему-то ровно 4кб).

Кто как справляется?
zencd M
Автор темы, Бывалый
Аватара
Возраст: 39
Откуда: spb
Репутация: 1
С нами: 11 лет 2 месяца

Сообщение #2 skipyrich » 23.10.2006, 04:41

zencd писал(а):Я менял настройки оптимизации и С++, и линкера, ничего не менялось - размер дллки оставался тем-же самым вплоть до байта(!). Это из-за того что Express Edition? Вообще размер получился 90кб; и это при том что в нём всего 170 строк. В проект у меня добавлены gdi32.lib user32.lib comdlg32.lib
А еще msvcr*.lib, msvcp*.lib, etc...
Это рантайм. Можно, конечно, включить динамическую линковку с рантаймом, тогда в зависимостях твоей библиотеки будет msvcr80.dll (и пользователям необходимо будет еще скачивать установщик рантайма vc2005), но начиная с версии 0.9 стало принято линковать плагины статически.
Ну и, в твоем случае, линкуется еще библиотечка detours.lib (170kb).
Так что, все OK :)

zencd писал(а):А в библиотеке MS Detours 7000 строк, и она умещается в 4096 байт
В библиотеке detoured.dll всего 18 строк, это фейковая dll, функциональности в ней нет никакой, важно лишь ее присутствие (см. detoured.cpp). Вся функциональность detours в статической библиотеке.

zencd писал(а):(почему-то ровно 4кб).
Это связано с выравниванием. Размер блока выравнивания можно задать опцией линкера /ALIGN:
MSDN писал(а):The /ALIGN option specifies the alignment of each section within the linear address space of the program. The number argument is in bytes and must be a power of two. The default is 4K (4096). The linker issues a warning if the alignment produces an invalid image.

Unless you are writing an application such as a device driver, you should not need to modify the alignment.
а также /OPT:WIN98|NOWIN98:
MSDN писал(а):WIN98 and NOWIN98 control the section alignment in the final image. For Windows 98 applications, it is optimal to align sections on a 4K boundary to improve load time (allows Windows 98 memory manager to cache executable images with a minimum of wasted space). This is on by default in the linker, so you need to specify /OPT:NOWIN98 to get a trimmed-down (but slower on Windows 98) version of the application.........
Помни!: пережатие из (wav|mp3|mpc|ogg|aac|...) в (mp3|mpc|ogg|aac|...) при любых битрейтах ухудшает качество
skipyrich M
Мастер
Возраст: 44
Откуда: Москва
Репутация: 11
С нами: 11 лет 7 месяцев


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