Справочная информация: я пишу код микроконтроллера C для записи файла EBML. EBML похож на двоичный XML с вложенными элементами, но вместо начального и конечного тегов есть начальный идентификатор, длина, а затем данные. Я записываю это во внешнюю флэш-память в приложении с низким энергопотреблением, поэтому я бы хотел, чтобы доступ к флэш-памяти был минимальным. Память также ограничена, потому что нет ничего легкого.
Когда я могу сохранить весь элемент EBML в памяти, генерировать его легко, потому что я могу вернуться и заполнить длину каждого элемента после того, как узнаю, что это за длина. Проблема в том, что делать, когда я не могу удержать весь элемент в памяти. Варианты, которые я вижу:
- Напишите то, что я знаю, затем вернитесь назад и добавьте длины (проще всего, но добавляет больше флэш-доступа, чем я хочу)
- Рассчитайте длину каждого элемента, прежде чем я начну писать (относительно легко, но много процессорного времени)
- Переключайте режимы, как только моя память заполняется, так что я затем продолжаю просматривать данные, но только для расчета длин для элементов, уже зарезервированных в памяти. Затем напишите, что у меня в памяти, и вернитесь назад и продолжите обработку данных, с которых я остановился. (Мой любимый вариант пока)
- Дайте элементам максимальную или наихудшую длину, когда они должны быть записаны, а их конечная длина еще не известна. (Проще, чем выше, но может иметь неприятные последствия и тратить пространство)
Вопрос: Похоже, это должно быть относительно распространенной проблемой, о которой думали люди. Я знаю, что это также может произойти при формировании некоторых пакетов данных. Есть ли здесь лучшая / более распространенная / более приемлемая техника, которую я пропускаю? Или просто некоторые термины для вопроса, который я могу найти?