>>5Writing 'cache friendly' code means being able to easily predict and control data layout - you have this in C.
C didn't really need an official MT memory model because C was the language used to implement OS level MT primitives, so de facto models were enough.
And C is actually built with reordering in mind - expression evaluation orders are left implementation defined except for a few specific 'sequence points', at the time they probably didn't have the cpu reordering the instructions in mind, but from a language point of view a compiler or cpu reordering things is the same thing - all the language can do is leave it up to the implementation and have an "as-if rule", which C does.