The recommendation is that you not:
- EXE compressors can make your application seem like a virus (self-modifying)
- gzip/zip are just as effective at compressing and don't tinker with your app
- EXE compressors make the load times of your app increase (unless you're just talking about the setup program which is a different matter
This crazy looking site brings up an argument I had heard in the distant past (whether it's true or not still today, I'm not sure, modern packers probably have a different strategy today) This article references Win32! :)
http://topic.csdn.net/t/20000408/08/6785.html
Modern multitasking OSes such as
Windows 95/98 and NT use what is
called a "virtual memory" system. When
programs start, all of their code is
not loaded into memory immediately
upon startup, as was the case with DOS
programs. Instead, only portions of
the code being actively executed are
stored into memory. For example, say
your program has a Print option on its
menu, and code behind it that handles
the printing. This code will only be
loaded into memory once the Print
feature is first selected by the user.
And if after the code is loaded into
memory the Print feature is not used
for a while the system will "discard"
the code, freeing the memory it
occupied, if another application
desperately needs memory. This is part
of a process called "paging" and is
completely transparent to the program.
Another way paging under Win32
conserves memory is it causes multiple
instances of a program (or DLL) to
share the same memory for code. In
other words, under normal
circumstances there is no real
difference in the amount of physical
memory allocated for code between
starting 100 instances of a program
and starting one instance.
If all Win32 programs behaved like
DOS programs, loading everything into
memory and keeping it there until the
program terminated and also not
sharing any memory between multiple
instances, you can probably imagine
how quickly physical memory could run
out on systems with a limited amount,
causing disk swapping to start.
Yet this is precisely what current
Win32 EXE compressors do to your
EXE's/DLL's! They completely go
against the OS's paging system by
decompressing all code into memory and
keeping it there until termination.
And because code isn't stored in a
"raw" format in the EXE file (i.e. the
same way it is stored in memory), the
OS is unable to share code between
multiple instances.