That's because C deals with how computers actually think.
No. C presents a highly idealised representation of how computers actually think. According to C, there are two types of data storage; disks and memory. One is accessed through fopen() etc., and the other through malloc() and its kin.
However, on any modern OS, calling fopen(), read() may well return me data that was residing in-memory in a file system cache, and a call to malloc() may well result in a pointer to data that's actually residing on the harddrive in the swap file. Then throw in things like L1, L2 cache into the mix, and we realise that we are writing code against an imaginary, idealised machine. I'd suggest that even by the time we reach 'C', we're in the realm of 'nothing at all to do with how the processor works'.
So why not keep going, and build newer storage models that don't make an arbitrary division between 'memory' and 'disk', and certainly don't force these upon the end-user?
Some of the nicest programs I've used recently, such as Adobe Lightroom, have done away with the concept of a 'Save' button entirely - changes the user makes to data are immediately reflected in the SQLite datastore. The end user, who's not a programmer, doesn't need to maintain a mental model of memory, filesystems etc.
Software production is assumed to be a line function, but it is run like a staff function. -- Paul Licker