[Перевод] Структуры данных на практике. Глава 19: Управление памятью в прошивках

Wait 5 sec.

«Управление сложностью — сама суть программирования компьютеров.» — Брайан КерниганСтадия финального тестированияМы находились на этапе финального тестирования проекта IoT‑датчика — устройства для умного дома с 128 КБ ОЗУ, которое отслеживает температуру, влажность и качество воздуха. Прошивка прошла все функциональные тесты. Юнит‑тесты: зелёные. Интеграционные тесты: зелёные. Энергопотребление: в пределах спецификации.Последним требованием был тест непрерывной эксплуатации в течение 72 часов. Мы подготовили в лаборатории двенадцать устройств, настроив их на отправку данных датчиков каждую секунду, и оставили их работать.Спустя три дня я пришёл в лабораторию, ожидая собрать логи тестирования и завершить проект.Но вместо этого выяснилось, что все двенадцать устройств аварийно выключились.В консоли последовательного порта на каждом устройстве была одна и та же ошибка:[72:14:23] malloc failed: out of memory[72:14:23] Fragmentation: 45%[72:14:23] System haltedУ меня cкрутило желудок. Проект планировалось выпустить через две недели. Я в точности знал, что произошло, и понимал, что решать проблему будет очень трудоёмко. Читать далее