>>47
MS C is a pretty good compiler for Win32. GCC performs okay, but overall worse than it for general purpose code. GCC tends to generate a lot of bloat (and no, I'm not talking about those damn debug symbols that tend to take 5 times the actual code size, as those can be stripped), I'm talking about how GCC manages the stack, register allocation, pipelining, and so on. Intel's compiler is likely better than MS' when it comes to CPU-specific optimizations, while MS' is mostly average, but solid, predictable and of mostly decent quality with its code generation. GCC, on the other hand, can generate unintiligible messes which are not that efficient, even if that was their supposed goal. It's not really GCC's fault, as when one makes a generic compiler as GCC which is supposed to support many CPUs and platforms, it's hard to make the best code generation on all platforms, and one usually compromises for something 'good enough'.
tl;dr: GCC's strength is in the amount of CPUs/OSes supported, open source nature, okay standard compliance.
MS C's strengths are in Win32-only code generation for x86 and x86 64, which is quite a limited set, but for this limited set it does quite well
ICC's strength lies on the x86, x86 64 platform, as it was designed by the same company that made the CPU. It's hard to beat someone at their own game (maybe even unfair as ICC tries to generate worse code for AMD CPUs unless the user hacks the libc to not do such idiocy).