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

Список разделов foobar2000 Плагины SDK

Описание: Разработка плагинов для 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
Автор темы
Аватара
Откуда: spb
Репутация: 1
С нами: 17 лет 6 месяцев

Сообщение #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.........
skipyrich M
Откуда: Москва
Репутация: 11
С нами: 17 лет 11 месяцев


Вернуться в SDK