In Cisco IOS, "NVRAM" is the name of the area where the startup-config resides.
"flash:" (or on some Cisco platforms, "bootflash:") is the name of the area where user files reside. On a factory-fresh device, this area contains the Cisco IOS image, but it can be used to store any arbitrary files.
Now: on most modern Cisco IOS devices, there is not necessarily a 1:1 relationship between these names ("NVRAM" and "flash") and the underlying hardware storage device(s) where the storage is implemented.
See, for example, the data sheet for the Cisco 4500X switch here. Under the "CPU and Memory" section, you only see one entry for a 2GB "NVRAM". This actually refers to a single 2GB flash memory chip on the board which contains the storage for both the IOS NVRAM as well as the IOS "flash:" file system. IOS software partitions the single hardware flash storage device into logical "NVRAM" and "flash:" areas. If you run the IOS EXEC command "format flash:", that would wipe out the contents of the "flash:" partition but leave the NVRAM partition intact (i.e. leave the startup-config intact), although both partitions reside on the same physical device, at least in the case of the Cisco 4500X.
So to answer the question: flash is the area where the user is allowed to store any arbitrary files, and is subject to operations like "format". This usage of flash must not interfere with the startup-config - after all, you don't want "wr mem" to fail because you've filled up the flash with your vacation photographs :-) - which is why it is a good idea to have the storage for startup-config reside on a separate partition which, for historical/traditional reasons is called NVRAM.