Передумови: Я пишу код мікроконтролера C, щоб написати файл EBML. EBML - це як бінарний XML з вкладеними елементами, але замість початкових і кінцевих тегів є ідентифікатор початку, довжина, а потім дані. Я записую це у зовнішній Flash у програмі малої потужності, тому я хотів би звести доступ до спалаху до мінімуму. Пам'ять також обмежена, тому що ніколи не буває просто.
Коли я можу зберігати весь елемент EBML в пам’яті, тоді генерувати його легко, тому що я можу повернутися назад і заповнити довжину кожного елемента після того, як я знаю, що це за довжина. Проблема полягає в тому, що робити, коли я не можу утримувати весь елемент в пам'яті. Я бачу такі варіанти:
- Напишіть те, що я знаю, а потім поверніться та додайте довжини (найпростіше, але додайте більше флеш-доступу, ніж я хочу)
- Обчисліть довжину кожного елемента перед тим, як почати його писати (порівняно легко, але багато процесорного часу)
- Перемикайте режими, коли моя пам’ять заповниться, щоб потім продовжувати дані, але тільки для обчислення довжини елементів, які вже зарезервовані в пам'яті. Потім запишіть те, що у мене є, і поверніться та продовжуйте обробляти дані, звідки я зупинився. (Мій улюблений варіант поки що)
- Надайте елементам максимальну або найгіршу довжину випадку, коли їх потрібно записати, а їх кінцева довжина ще не відома. (Легше, ніж вище, але це може призвести до пожежі та втратити місце)
Питання: Схоже, це має бути відносно поширеним питанням, про яке люди думали. Я знаю, що це може статися і при формуванні деяких пакетів даних. Чи є краща / більш поширена / більш прийнята методика, якої я тут відсутній? Або просто якісь умови для проблеми, які я можу шукати?