Память: SRAM, DRAM, flash
Три типа памяти внутри любого компьютера и микроконтроллера, и у каждого свой компромисс.
SRAM (статическая) — шесть транзисторов на бит. Быстрая (единицы наносекунд), не требует обновления, но занимает много места. Используется для кэшей процессора и оперативной памяти внутри микроконтроллера (у ESP32 520 КБ — это SRAM).
DRAM (динамическая) — один транзистор и один конденсатор на бит. Ёмкость маленькая (фемтофарады), заряд утекает, поэтому нужна регенерация каждые несколько миллисекунд. Плотная и дешёвая — из неё делают модули памяти компьютера. Медленнее SRAM.
Flash (энергонезависимая) — плавающий затвор, который удерживает заряд без питания. Плотная, дешёвая, но запись блоками, медленная и с ограниченным ресурсом (10 000–100 000 циклов). Из неё делают SSD, SD-карты, прошивку микроконтроллеров.
EEPROM — разновидность с побайтовой записью и ресурсом 100 000–1 000 000 циклов. Маленькая (килобайты), для настроек.
Сравнение по скорости (порядок): регистры — доли наносекунды, SRAM — единицы, DRAM — десятки, flash — сотни микросекунд на запись.
Что это значит на практике: если нужно быстро и много — SRAM (дорого, поэтому мало), если нужно хранить данные без питания — flash, если нужно менять настройки часто — EEPROM или эмуляция с wear leveling.
И важное: у flash нельзя перезаписать байт, не стерев блок (обычно 4 КБ). Поэтому файловая система и библиотеки прячут это за собой.
Разница между SRAM, DRAM и flash объясняет ограничения памяти микроконтроллера и износ хранилища.
Найди в даташите своей платы: сколько SRAM, сколько flash, есть ли EEPROM. Сравни с размером своей программы.
Проверь себя
Почему в микроконтроллере 520 КБ SRAM, а не 8 ГБ, как в компьютере?
SRAM занимает шесть транзисторов на бит и физически огромна. 8 ГБ стоили бы целого кристалла и стоили бы как процессор. Поэтому SRAM — маленькая и быстрая, а большие объёмы — flash и внешняя память.