It was thus said that the Great Richard Erlacher once stated:
 Even today's compilers demand several hundred Kbytes for a simple
"hello-world"
 program on one of today's machines, while it took well fewer than 256 bytes of
 executable code to print a short text string on a Z-80 or 6502. 
  It depends on how well you know the compiler.  On my system here (Linux
2.0 with GCC 2.7.2.3:
        #include <stdio.h>
        #include <stdlib.h>
        int main(void)
        {
          printf("Hello world\n");
          return(EXIT_SUCCESS);
        }
  I compiled using ``gcc -O4 -fomit-frame-pointer -o hello hello.c ; strip
hello'' and I got an executable of 2,684 bytes in size.  Not content with
that, I then wrote:
        #include <stdlib.h>
        #include <unistd.h>
        int main(void)
        {
          write(STDOUT_FILENO,"Hello world\n",12);
          _exit(EXIT_SUCCESS);
        }
  Which avoids the Standard C Library and calls the Unix kernel directly.  I
then did:
        gcc -O4 -fomit-frame-pointer -c -o h2.o h2.c
        ld -o h2 -Bstatic -e main h2.o /usr/lib/libc.a
        strip h2
  Which got me an executable of 768 bytes.
  Many years ago I hand crafted a 168 byte ``Hello World'' program on the
SGI.  And by hand crafted, that means I built the executable (including
headers) byte by byte.  That was (and perhaps still is) the smallest binary
you could have had on an SGI.
  It was several years later when I came across an incantation that would
turn the C version (the second one above) into a ~350 byte executable.  I
don't recall the incantation but it was impressive.
  -spc (The smallest I've been able to get is 372, and that's by writing
        directly in assembler and discarding unused segments ... )