Majhna količina RAM-a in naprav za dolgoročno shranjevanje na osebnih računalnikih je v preteklosti nalagala zelo stroge omejitve glede velikosti programov. Ta problem danes ne obstaja. Vendar je tudi zdaj včasih pomembno čim bolj zmanjšati velikost exe-modula razvite aplikacije.
Potrebno
- - vir;
- - prevajalnik, povezovalnik;
- - kompresorji PE modulov, kot so UPX, Themida.
Navodila
Korak 1
Izdelajte različico za izdajo aplikacije, ki jo je mogoče izvršiti. V nastavitvah projekta v IDE izberite ustrezno konfiguracijo. Če takšne konfiguracije ni, jo ustvarite na podlagi obstoječe. Spremenite seznam možnosti povezovalnika tako, da odstranite in dodate ustrezne direktive. Torej, ko uporabljate Microsoftov razvojni paket, odstranite možnost / debug. V izvorno kodo lahko dodate tudi naslednjo direktivo: #pragma comment (linker, "/ RELEASE")
2. korak
Konfigurirajte projekt, da se čim bolj izognete povezovanju izvršljive datoteke s statičnimi knjižnicami. Uporabite skupne različice ustreznih knjižnic. Kodo knjižnic izvajalnega okolja C in C ++ lahko na primer izključite z zamenjavo možnosti povezovanja / ML ali / MT (statične eno- in večnitne knjižnice) z / MD (večnitni CRT DLL).
3. korak
Razmislite o združitvi različnih odsekov modula exe v enega. Ta metoda ne bo dala opaznega rezultata, če je datoteka dovolj velika, vendar je pri začetni velikosti modula 20-30 kilobajtov dobiček lahko znaten. Možnost / spajanje povezovalnika omogoča spajanje odsekov. Nastavite ga lahko s parametri projekta: / merge:.text =.data /merge:.reloc=.data /merge:.rdata=.data ali z uporabo pragma direktiv v izvorni kodi: #pragma comment (linker, "/ spajanje:.text =.data ") # pragma komentar (povezovalec," /merge:.reloc=.data")#pragma komentar (povezovalnik, "/merge:.rdata=.data")#pragma komentar (povezovalnik," / merge:.idata =.data ") Prav tako je smiselno definirati atribute nastalega razdelka: #pragma comment (linker," /section:.data, rwe ")
4. korak
Zmanjšajte velikost exe, tako da nastavite najmanjšo vrednost velikosti blokov, na mejah katerih so odseki poravnani. Uporabite možnost / filealign linker, določeno z urejanjem lastnosti projekta ali direktive pragma: #pragma comment (linker, "/ filealign: 0x200") Ta metoda je primerna za majhne module.
5. korak
Poskusite zmanjšati velikost datoteke exe, tako da jo sestavite z možnostmi optimizacije, da zmanjšate količino strojne kode. Možnosti prevajalnika / O2 ali / Od zamenjajte z / O1.
6. korak
Zamenjajte standardni DOS-ov oksid v exe-modulu s svojim, ki bo imel najmanjšo velikost. Uporabite možnost povezave / stub: #pragma comment (linker, "/stub:mystub.exe")Tu je mystub.exe ime izvršljive datoteke DOS, ki bo dodana v modul exe kot okrasna.
7. korak
Razmislite o določitvi lastne vstopne točke v aplikacijo. To bo odpravilo inicializacijsko kodo statičnih izvajalnih knjižnic. Uporabite možnost / entry linker, na primer: #pragma comment (linker, "/ entry: MyStartup") void MyStartup () {:: MessageBox (NULL, "Hello!", "Message!", MB_OK);}
8. korak
Na končno datoteko exe uporabite pripomočke za pakiranje, kot so UPX, ASPack, Themida, PECompact. Podatki modula bodo stisnjeni. Po zagonu aplikacije bodo razpakirani v pomnilnik. Ta metoda daje dobre rezultate za velike datoteke exe, ki vsebujejo veliko količino statičnih podatkov z nizko entropijo (na primer rastri DIB v razdelku z viri).