Tło: Piszę kod C mikrokontrolera, aby zapisać plik EBML. EBML jest jak binarny XML z zagnieżdżonymi elementami, ale zamiast znaczników początkowego i końcowego istnieje identyfikator początkowy, długość, a następnie dane. Piszę to w zewnętrznej pamięci Flash w aplikacji o niskiej mocy, więc chciałbym ograniczyć dostęp do lampy błyskowej do minimum. Pamięć jest również ograniczona, ponieważ nic nigdy nie jest łatwe.
Kiedy mogę zachować cały element EBML w pamięci, wtedy generowanie go jest łatwe, ponieważ mogę wrócić i wypełnić długość każdego elementu po tym, jak wiem, jaka jest ta długość. Problem polega na tym, co zrobić, gdy nie mogę utrzymać całego elementu w pamięci. Opcje, które widzę to:
- Napisz, co wiem, a następnie wróć i dodaj długości (najłatwiej, ale dodaje więcej dostępu flash niż chcę)
- Oblicz długość każdego elementu, zanim zacznę go pisać (stosunkowo łatwo, ale dużo czasu procesora)
- Przełączaj tryby, gdy moja pamięć się zapełni, aby kontynuować dane, ale tylko w celu obliczenia długości elementów już zarezerwowanych w pamięci. Następnie napisz, co mam w pamięci, i wróć i kontynuuj przetwarzanie danych od miejsca, w którym przestałem. (Moja ulubiona jak dotąd opcja)
- Podaj elementom maksymalną lub najgorszą długość przypadku, gdy trzeba je napisać, a ich ostateczna długość nie jest jeszcze znana. (Łatwiej niż powyżej, ale może spowodować pożar i marnować miejsce)
Pytanie: Wydaje się, że powinien to być dość powszechny problem, o którym ludzie myśleli. Wiem, że może się to zdarzyć również podczas tworzenia niektórych pakietów danych. Czy brakuje mi lepszej / bardziej powszechnej / bardziej akceptowanej techniki? A może tylko niektóre terminy dotyczące problemu, który mogę wyszukać?