Antecedentes: estoy escribiendo el código C del microcontrolador para escribir un archivo EBML. EBML es como un XML binario con elementos anidados, pero en lugar de etiquetas de inicio y fin, hay una ID de inicio, longitud y luego los datos. Estoy escribiendo esto en Flash externo en una aplicación de baja potencia, por lo que me gustaría mantener los accesos de flash al mínimo. La memoria también es limitada, porque nada es fácil.
Cuando puedo mantener todo el elemento EBML en la memoria, generarlo es fácil porque puedo regresar y completar la longitud de cada elemento después de saber cuál es esa longitud. El problema es qué hacer cuando no puedo mantener todo el elemento en la memoria. Las opciones que veo son:
- Escriba lo que sé, luego regrese y agregue las longitudes (lo más fácil, pero agrega más acceso flash de lo que quiero)
- Calcule la longitud de cada elemento antes de comenzar a escribirlo (relativamente fácil, pero mucho tiempo de procesador)
- Cambiar de modo una vez que mi memoria se llene, de modo que luego continúe con los datos, pero solo para calcular las longitudes de los elementos ya reservados en la memoria. Luego escriba lo que tengo en la memoria, regrese y continúe procesando los datos desde donde los dejé. (Mi opción favorita hasta ahora)
- Otorgue a los elementos la longitud máxima o peor de los casos cuando necesitan ser escritos y su longitud final aún no se conoce. (Más fácil que el anterior, pero podría ser contraproducente y desperdiciar espacio)
Pregunta: Parece que este debería ser un problema relativamente común en el que la gente haya pensado. Sé que también puede suceder cuando se forman algunos paquetes de datos. ¿Hay una técnica mejor / más común / más aceptada que me falta aquí? ¿O solo algunos términos para el problema que puedo buscar?