>>9
GCC isn't that bad, but it adds some unnecesary bloat to your executable by default. For example, it adds a bunch of symbol names at the end of your executable, I thought this was a linux/ELF-related thing, but it seems to do the same for Windows PE files too. When it comes to the actual quality of generated code, some optimizations GCC makes are quite interesting and probably fast (for example: I noticed it can write parameters directly to the stack instead of pushing them. I don't know how fast/slower this is compared to just pushing parameters, but it does eliminate the need to adjust the stack pointer or pop the stack afterwards), also it has a fairly weird way of dealing with relative offsets.
Microsoft's C compiler can generate pretty clean code and usually much more compact if you know what options to use when compiling, it's much more traditional when it comes to code generation than GCC, but also has many x86-specific optimizations.
I don't think the speed difference between the 2 compilers is very large providing you're OPTIMIZING YOUR CFLAGS properly, however MS' C compiler wins on readability and clarity when you examine the generated assembly, while GCC wins on being supported on way too many platforms and being open source, meaning you can port it to any new platform you want.
Now for something offtopic: Have any of you read through the Plan 9 c compiler source code? It's one of the smallest C compilers I've seen, and the source is quite readable, albeit the lack of comments.