De kleine hoeveelheid RAM en opslagapparaten voor de lange termijn op pc's legden in het verleden zeer strikte beperkingen op aan de grootte van programma's. Dit probleem bestaat vandaag de dag niet. Maar ook nu is het soms belangrijk om de omvang van de exe-module van de ontwikkelde applicatie zoveel mogelijk te minimaliseren.
Noodzakelijk
- - bron;
- - compiler, linker;
- - compressoren van PE-modules, zoals UPX, Themida.
instructies:
Stap 1
Bouw de releaseversie van het uitvoerbare bestand van de toepassing. Selecteer de juiste configuratie in de projectinstellingen in de IDE. Als een dergelijke configuratie niet bestaat, maakt u deze op basis van de bestaande. Wijzig de lijst met linkeropties door de juiste richtlijnen te verwijderen en toe te voegen. Dus als u een ontwikkelpakket van Microsoft gebruikt, moet u de optie / debug verwijderen. U kunt ook de volgende instructie aan de broncode toevoegen: #pragma comment (linker, "/ RELEASE")
Stap 2
Configureer het project om te voorkomen dat het uitvoerbare bestand zoveel mogelijk wordt gekoppeld aan statische bibliotheken. Gebruik gedeelde versies van de respectieve bibliotheken. U kunt bijvoorbeeld de code van de C- en C++ runtime-bibliotheken uitsluiten door de linkeroptie / ML of / MT (statische single- en multi-threaded bibliotheken) te vervangen door / MD (multi-threaded CRT DLL).
Stap 3
Overweeg om verschillende secties van de exe-module samen te voegen tot één. Deze methode geeft geen merkbaar resultaat als het bestand groot genoeg is, maar met de initiële modulegrootte van 20-30 kilobytes kan de winst aanzienlijk zijn. Met de optie / merge linker kunt u secties samenvoegen. Je kunt het instellen via de projectparameters: / merge:.text =.data /merge:.reloc=.data /merge:.rdata=.data of door pragma-richtlijnen in de broncode te gebruiken: #pragma comment (linker, "/ merge:.text =.data ") # pragma comment (linker," /merge:.reloc=.data")#pragma comment (linker, "/merge:.rdata=.data")#pragma comment (linker," / merge:.idata =.data ") Het is ook logisch om de attributen van de resulterende sectie te definiëren: #pragma comment (linker," /section:.data, rwe ")
Stap 4
Verklein de grootte van de exe door de minimumwaarde in te stellen van de grootte van de blokken langs de grenzen waarvan de secties zijn uitgelijnd. Gebruik de / filealign linker-optie gespecificeerd door de projecteigenschappen of de pragma-richtlijn te bewerken: #pragma comment (linker, "/ filealign: 0x200") Deze methode is geschikt voor kleine modules.
Stap 5
Probeer de grootte van het exe-bestand te verkleinen door het te bouwen met optimalisatie-opties om de hoeveelheid machinecode te verminderen. Vervang de / O2 of / Od compiler-opties door / O1.
Stap 6
Vervang de standaard DOS-stub in de exe-module door uw eigen, die de minimale grootte heeft. Gebruik de /stub linker-optie: #pragma comment (linker, "/stub:mystub.exe")Hier is mystub.exe de naam van het uitvoerbare DOS-bestand dat als een stub aan de exe-module wordt toegevoegd.
Stap 7
Overweeg om uw eigen toegangspunt voor de toepassing op te geven. Hierdoor wordt de initialisatiecode van de statische runtime-bibliotheken geëlimineerd. Gebruik de linkeroptie / entry, bijvoorbeeld: #pragma comment (linker, "/ entry: MyStartup") void MyStartup () {:: MessageBox (NULL, "Hello!", "Message!", MB_OK);}
Stap 8
Pas verpakkingshulpprogramma's zoals UPX, ASPack, Themida, PECompact toe op het voltooide exe-bestand. De modulegegevens worden gecomprimeerd. Ze worden uitgepakt in het geheugen na het starten van de applicatie. Deze methode geeft goede resultaten voor grote exe-bestanden die een grote hoeveelheid statische gegevens met lage entropie bevatten (bijvoorbeeld DIB-rasters in de bronsectie).