A pequena quantidade de RAM e dispositivos de armazenamento de longo prazo em computadores pessoais no passado impunham restrições muito estritas ao tamanho dos programas. Este problema não existe hoje. No entanto, mesmo agora, às vezes é importante minimizar o tamanho do módulo exe do aplicativo desenvolvido tanto quanto possível.
Necessário
- - fonte;
- - compilador, vinculador;
- - compressores de módulos PE, como UPX, Themida.
Instruções
Passo 1
Crie a versão de lançamento do executável do aplicativo. Selecione a configuração apropriada nas configurações do projeto no IDE. Se não houver tal configuração, crie-a com base na existente. Modifique a lista de opções do vinculador removendo e adicionando as diretivas apropriadas. Portanto, ao usar um pacote de desenvolvimento da Microsoft, você deve remover a opção / debug. Você também pode adicionar a seguinte diretiva ao código-fonte: #pragma comment (linker, "/ RELEASE")
Passo 2
Configure o projeto para evitar vincular o executável a bibliotecas estáticas, tanto quanto possível. Use versões compartilhadas das respectivas bibliotecas. Por exemplo, você pode excluir o código das bibliotecas de tempo de execução C e C ++ substituindo a opção de vinculador / ML ou / MT (bibliotecas estáticas de um e vários segmentos) por / MD (DLL CRT de vários segmentos).
etapa 3
Considere mesclar diferentes seções do módulo exe em uma. Este método não dará um resultado perceptível se o arquivo for grande o suficiente, mas com o tamanho do módulo inicial de 20-30 kilobytes, o ganho pode ser significativo. A opção de vinculador / merge permite mesclar seções. Você pode defini-lo por meio dos parâmetros do projeto: / merge:.text =.data /merge:.reloc=.data /merge:.rdata=.data ou usando diretivas pragma no código-fonte: #pragma comment (linker, "/ merge:.text =.data ") # pragma comment (linker," /merge:.reloc=.data")#pragma comment (linker, "/merge:.rdata=.data")#pragma comment (linker," / merge:.idata =.data ") Também faz sentido definir os atributos da seção resultante: #pragma comment (linker," /section:.data, rwe ")
Passo 4
Reduza o tamanho do exe definindo o valor mínimo do tamanho dos blocos ao longo dos limites dos quais as seções estão alinhadas. Use a opção de vinculador / filealign especificada editando as propriedades do projeto ou a diretiva pragma: #pragma comment (linker, "/ filealign: 0x200") Este método é adequado para módulos pequenos.
Etapa 5
Tente reduzir o tamanho do arquivo exe construindo-o com opções de otimização para reduzir a quantidade de código de máquina. Substitua as opções de compilador / O2 ou / Od por / O1.
Etapa 6
Substitua o stub padrão do DOS no módulo exe pelo seu próprio, que terá o tamanho mínimo. Use a opção de vinculador / stub: #pragma comment (linker, "/stub:mystub.exe")Aqui mystub.exe é o nome do arquivo executável DOS que será adicionado ao módulo exe como um stub.
Etapa 7
Considere especificar seu próprio ponto de entrada para o aplicativo. Isso eliminará o código de inicialização das bibliotecas de tempo de execução estáticas. Use a opção de vinculador / entry, por exemplo: #pragma comment (linker, "/ entry: MyStartup") void MyStartup () {:: MessageBox (NULL, "Hello!", "Message!", MB_OK);}
Etapa 8
Aplique utilitários de empacotamento como UPX, ASPack, Themida, PECompact ao arquivo exe acabado. Os dados do módulo serão compactados. Eles serão desempacotados na memória após o lançamento do aplicativo. Este método fornece bons resultados para grandes arquivos exe contendo uma grande quantidade de dados estáticos com baixa entropia (por exemplo, rasters DIB na seção de recursos).