>>26
C wants to be ``low-level'', and does so by using low-level concepts like pointers and those (mostly) pointless unions, and limiting how much code can be abstracted.
Now, since C code is not abstracted, and pointers ``mostly'' map one-to-one with assembly, there's nothing to optimize away, there's no abstraction! The compiler can only:
1) Optimize trivialities
2) Guess what you meant and compile to the most performant code to do that task.
And you can't help the compiler, since you can't access the machine's assembly and hand-optimize it yourself! It's slow by design.