UPX (The Ultimate Packer for Executables) is a free (open source) packer for executable programs. UPX packed applications take up far less space on disk, in exchange for slightly higher memory use on startup. UPX can also pack Win32 DLLS.
For more information on UPX, see http://upx.sourceforge.net/
For more specific technical information on UPX options, see the 'upx.doc' file that comes with UPX.

Binary File to Pack
UPX can pack executable files, Win32 DLLs and screensavers.
If you do not specify an output file, the compressed executable will be written over the original file. Note that you cannot compressed an already-compressed executable.
Verbosity
Specify the level of output from the UPX utility.

Compression Level
Compression levels range from 1 (fastest) to 9 (slower, better) and then "best" (maximum compression.)
Compression Method
UPX currently supports two compression algorithms, NRV2B and NRV2D. UPX's creators recommend trying both and seeing which gives better results for your application.
Level of memory use
Specify the amount of memory which UPX will use for packing the executable.
Higher numbers will use more memory to provide faster results and (slightly) better compression. Setting the value to 999999 will use as much available memory as required for the best results.
Compress the export section
Equivalent of (--compress-exports=0/1)
If checked, the export section of the Win32/PE executable will be compressed. This gives a good saving in size, but does not work with all applications. See the UPX documentation for more details.
Compress resources / Compress icons
Equivalent of (--compress-resources=0/1 and --compress-icons=0/1/2)
UPX can be set to compress application resources, including icons. See the UPX documentation for more details.
Strip Relocation Records
Equivalent of (--strip-relocs=0/1)
If checked, UPX will strip the relocation records of executables. See the UPX documentation for more details.
Force compression even with unknown header fields
Equivalent of (--force)
If this option is checked, it forces UPX to compress the executable even if it finds unknown data in the executable header fields. This may render your application unusable. See the UPX documentation for more details.