Compressores de executáveis

Um arquivo executável, também conhecido por “EXE”, contém geralmente a forma compilada em linguagem de máquina de um programa escrito em alguma linguagem de alto nível (ex: Delphi, C, Visual Studio, etc).

No entanto, a maioria dos executáveis não carregam apenas código. Entre outras coisas, os EXEs contém os chamados resources (ex: imagens utilizadas dentro do programa, ícones, strings, etc).

Com isso, o tamanho de um executável pode chegar a vários megabytes. Isso geralmente não é problema quando ele está gravado em um HD local, mas se estiver em um diretório compartilhado na rede, pode haver uma certa demora no seu carregamento quando for executado. A demora é diretamente proporcional ao tamanho do EXE e a velocidade da rede.

Felizmente, existem programas conhecidos como “EXE compressors“. Eles compactam um executável criando um novo arquivo executável, que contém um código de descompactação automático. Quando você roda esse novo executável, esse código descompacta e executa o programa original na memória do computador. Em suma, não há qualquer diferença visual perceptível ao se executar um EXE compactado se comparado ao EXE original, mas há um grande ganho de velocidade de carregamento, pois geralmente os executáveis compactados ficam com menos da metade do tamanho do original.

Recentemente, realizei alguns testes para ver a eficiência dos três compressores mais famosos: AsPack, PECompact e UPX.

O AsPack é o mais rápido na tarefa de compactação. O PECompact foi o que gerou o menor dos executáveis, mas teve o maior tempo de compactação. O UPX ficou em último lugar em relação a taxa de compressão, mas perdeu por poucos Kbytes para o AsPack, e compactou um pouco mais rápido que o PECompact. A principal vantagem do UPX é ser Open Source, gratuito, e multiplatarforma (você pode compactar executáveis Windows, Linux, etc).

Abaixo segue a tabela com os resultado que obtive nos testes:

EXE Original AsPack 2.12 PECompact 2.79 UPX 3.02w
15.217.152 bytes 4.139.520 bytes 3.633.664 bytes 4.183.552 bytes

Existem alguns outros compressores de executáveis que não cheguei a testar. Caso queira fazer seus próprios testes, este artigo traz um comparativo (mais antigo) com diversos compressores.