Оперативная память ценный ресурс, а Flash память программ не часто используется на 100%. Строковые литералы засоряют оперативную память даже если они используются для объявления переменных и констант локально.
Строковые литералы можно хранить в Flash памяти. На плате Arduino UNO, NANO и им подобных установлен микроконтроллер ATmega328 / P. М-к ATmega328 содержит 32 Кбайт Flash-памяти программ, 1 Кбайт энергонезависимой памяти (EEPROM), 2 Кбайт оперативной памяти (SRAM).
Пример, сохраняем строку вFlash памяти и восстанавливаем в строковый массив:
Скетч использует 1968 байт (6%) памяти устройства. Глобальные переменные используют 188 байт (9%) динамической памяти.
Сравните наш результат с более простой программой, без оптимизации:
Скетч использует 1884 байт (5%) памяти устройства. Глобальные переменные используют 374 байт (18%) динамической памяти.
Вывод, мы смогли сэкономить 50% (динамической) оперативной памяти.
Ещё один вариант программы оптимизированный по использованию памяти:
Скетч использует 3424 байт (10%) памяти устройства. Глобальные переменные используют 198 байт (9%)