I thought that the latest consensus on HN was that C is nowhere closer to the hardware.
Caching, out-of-order execution, branch prediction, speculation... all of those things are just as opaque to assembly as they are to C.
C isn't even close to that anymore, now that so many processors have SIMD ISAs which C can't usefully model.
1. Processors no longer look all that much like C's idea of what a processor is.
2. Processors are optimized to be able to execute C code very well. But an optimizing compiler can make it much better.
There's a fair amount of magic in compilers to make this work.
Caching, out-of-order execution, branch prediction, speculation... all of those things are just as opaque to assembly as they are to C.