a statically linked executable will hold all required binary code
inside it, e.g. even a simple hello-world will be over 1MB in
a dynamically linked executable will look for the libraries it's
linked against at runtime, will be small. If you run several
instances (or if other programs have requested those libraries)
they'll only be loaded into RAM once.
The only two valid reasons to use static linking as far as I'm
a) If your system is set-up as multiple mount-points/file-systems
and you can't be sure that the filesystem with the libs will be
available at runtime, or you're worried that an upgrade of the
libs may render the system unusable (e.g. Solaris default shell
for the user root is statically linked)
b) You're distributing a binary without source, and can't make
any assumptions as to what the target system will have installed
in terms of libs.