ОК ли е да се използват компресирани dll(и)?

Наистина ми липсва опит в разработването на неща под Windows и може да съм пропуснал някои очевидни неща, опитайте се да останете спокойни :)

Имам приложение (Qt C++), което използва някои .dlls от собствения си път (имам предвид, че доставям тези .dlls заедно с .exe). Когато доставя приложението, компресирам dll чрез upx. Той драматично ги компресира и мога да използвам тези dlls без декомпресиране.

Имам впечатлението, че правя нещо нередно, но просто работи случайно, така че исках да съм сигурен, добре ли е да използвам компресиран dll? Или трябва да очаквам непредвидими проблеми по всяко време? (Това е основният въпрос)

Ако .dlls могат да се използват в компресиран режим, тогава защо изобщо ги имаме некомпресирани.


person destan    schedule 23.01.2013    source източник
comment
Windows не поддържа компресирани DLL файлове. Ако имате проблем, ще трябва да се консултирате с производителите на UPX. Защо бихте искали да компресирате вашите dll файлове на първо място? Толкова ли е огромна вашата програма? (PS: Windows може да бъде конфигуриран да компресира директории).   -  person Simon Mourier    schedule 23.01.2013
comment
всъщност програмата ми е малка, но dlls файловете, от които зависи, са големи, така че потребителите не биха искали да изтеглят 50mb за малка помощна програма...   -  person destan    schedule 23.01.2013


Отговори (1)


Това не е нещо, което "работи случайно", UPX е предназначен да компресира Win32-PE (и много други формати), независимо дали това са изпълними или DLL файлове.

Що се отнася до „Добре ли е?“, добре да, разбира се, че е „ОК“, стига да не нарушавате лиценза на друга страна. Това е много малко вероятно да се случи с нещо, свързано с Qt, но по принцип е възможно. Един може например да използва някои DLL файлове, които имат лицензионна клауза като „разпространение в двоична форма, бла-бла, не е позволено да се променя“. Да речем, нещо като преразпределяем MSVC или DirectX, или патентован API на доставчик на графична карта. Във всеки случай не е грешка да имате това предвид и да проверите лицензите преди да рискувате да ги нарушите.

Формулирайки въпроса си „Добре ли е?“ малко по-различно: „Разумно ли е?“, отговорът е: вероятно не. Няколко мегабайта допълнително на диска обикновено нямат голямо значение. Когато опаковате всичко в инсталатор и потребителят го изтегли през интернет, данните така или иначе се компресират, така че в това отношение е същото.

Въпреки това, компресирането, независимо дали използвате UPX или друг изпълним пакет, или компресирането на файловата система на Windows, има странични ефекти. Той причинява допълнително фрагментиране на адресното пространство, деактивира асинхронните трансфери и губи способността на операционната система да отхвърля страници от DLL от работния набор и да ги презарежда прозрачно от PE изображението при достъп.

Последното изречение означава, че операционната система трябва да направи разпределение във файла на страницата и трябва да записва страници във файла на страницата, когато работният набор на вашия процес бъде преместен, за да освободи място за нещо друго. Друг начин няма. Ами ако потребителят е деактивирал файловете на страницата...

person Damon    schedule 23.01.2013