>>23Cache sizes, number of cache levels and DMA channels are implementation details, you can't write portable code which is maximally memory efficient (or any kind of efficiency really).
Any half-decent C implementation will either give you apis/syscalls/intrinsincs/pragmas for controlling these things exactly.
The point is that C is the languages used to implement the lower level threading primitives, so you will be writing implementation specific code anyway, so not having an official standard for it isn't a big deal.
Once you introduce external interaction of any kind, be it MMIO, debugger run control, OS traps... it all falls down and you are left with implentation defined behavior again.
What falls down?
It being implementation specific is the entire point, that is what allows compilers (and in effect cpus, memory controllers or what have you) maximum leeway to reorder things.