Flash is the electrically erasable member of the ROM family that won. Like an EEPROM, it stores bits as charge on floating gates and needs no power to keep them: it's non-volatile.
The difference is how it erases: in blocks, often thousands of bytes at a time. Writing can set individual bits one way, but changing them back requires erasing the whole block. Giving up byte-level erasing lets the cells be smaller and simpler, so flash is far denser and cheaper per bit.
Changing one byte inside a block therefore takes three steps:
- Read the whole block into RAM.
- Erase the block.
- Write the block back with the one byte changed.
Flash wears out after a limited number of erase cycles per block, so controllers spread writes around (wear leveling).
Where it's used: SSDs, USB sticks, memory cards, phones, and the firmware of almost every modern device, which is why firmware can be updated in the field.