Q:

Why is the file size of the executable file larger than the .cpp source file with no includes?

Why is the file size of the executable file larger than the source? I made the example below (the simplest one I could think of) and it the executable is still so huge compared to the source, even though (I think) it's not using any libraries.
Simplest.cpp: 33 bytes
Simplest.s:   386 bytes
Simplest.exe: 60076 bytes
Simplest.cpp:
int main(void)
{
    return 0;
}

Simplest.s:
        .file   "Simplest.cpp"
        .def    ___main;        .scl    2;      .type   32;     .endef
        .text
        .globl  _main
        .def    _main;  .scl    2;      .type   32;     .endef
_main:
LFB0:
        .cfi_startproc
        pushl   %ebp
        .cfi_def_cfa_offset 8
        .cfi_offset 5, -8
        movl    %esp, %ebp
        .cfi_def_cfa_register 5
        andl    $-16, %esp
        call    ___main
        movl    $0, %eax
        leave
        .cfi_restore 5
        .cfi_def_cfa 4, 4
        ret
        .cfi_endproc
LFE0:
        .ident  "GCC: (GNU) 4.8.3"

Not sure if it's relevant, but I'm using g++ compiler on cygwin on Windows 8 with an Intel processor.

A:

The executable is linked with lots of libraries. So, when your compiler's done linking, the file size increases. libc or libc++ are always linked against when you're building a C or C++ program.
You could read this article about gcc's linking process.
ld's manpage says 

ld combines a number of object and archive files, relocates their data and ties up symbol references. Usually the last step in compiling a program is to run ld.

All in all, linkers may put lots of stuff into the executable. No wonder why its size can be greater than the source file's size.

Note: the links above are about linking on Unix, not Windows, but Cygwin tries to somehow simulate the behavior of Linux/Unix systems, so they're still relevant.

