Arka plan: EBML dosyası yazmak için mikro kontrolör C kodu yazıyorum. EBML, iç içe öğelere sahip bir ikili XML gibidir, ancak başlangıç ve bitiş etiketleri yerine bir başlangıç kimliği, uzunluğu ve ardından veriler vardır. Bunu düşük güçlü bir uygulamada harici Flash'a yazıyorum, bu yüzden flaş erişimini minimumda tutmak istiyorum. Bellek de sınırlıdır, çünkü hiçbir şey kolay değildir.
EBML öğesinin tamamını bellekte tutabildiğimde, bunu oluşturmak kolaydır, çünkü bu uzunluğun ne olduğunu öğrendikten sonra geri dönüp her bir öğenin uzunluğunu doldurabilirim. Sorun, tüm elemanı hafızada tutamadığım zaman ne yapacağım. Gördüğüm seçenekler:
- Bildiklerimi yaz, sonra geri dön ve uzunlukları ekle (en kolay, ancak istediğimden daha fazla flaş erişimi ekliyor)
- Yazmaya başlamadan önce her bir öğenin uzunluğunu hesaplayın (nispeten kolay, ancak çok fazla işlemci süresi)
- Modları belleğimi doldurduktan sonra değiştiriyorum, böylece verilerde devam edeceğim, ancak sadece bellekte zaten ayrılmış olan elemanların uzunluklarını hesaplamak için. Sonra bellekte ne yazıyorum ve geri dönüp kaldığım yerden verileri işlemeye devam et. (Şimdiye kadarki favori seçeneğim)
- Yazılmaları gerektiğinde ve son uzunlukları henüz bilinmiyorsa öğelere maksimum veya en kötü durum uzunluğu verin. (Yukarıdakilerden daha kolay, ancak geri tepebilir ve alan israf edebilir)
Soru: Bu, insanların düşündüğü nispeten yaygın bir sorun gibi görünüyor. Bazı veri paketleri oluştururken de olabileceğini biliyorum. Burada özlediğim daha iyi / daha yaygın / daha kabul görmüş bir teknik var mı? Ya da sadece arayabileceğim sorun için bazı terimler?