LEB128 es un esquema de codificación de longitud variable diseñado para representar enteros (con o sin signo) utilizando un número variable de bytes. Cada byte, excepto el último, tiene el bit más significativo (MSB) establecido a 1 para indicar que hay bytes adicionales. Los 7 bits restantes de cada byte se utilizan para almacenar los bits de datos del número, en un orden de bits de menor a mayor (little-endian). Esto permite que los números pequeños se codifiquen con un solo byte, mientras que los números más grandes utilizan más bytes, pero solo los necesarios, lo que resulta en una representación compacta.
Este esquema de codificación se utiliza ampliamente en varios sistemas y formatos de archivo para optimizar el almacenamiento y la transmisión de datos. Un ejemplo prominente es su uso en WebAssembly (Wasm) para codificar índices, tamaños y otros valores enteros, contribuyendo a la compacidad de los módulos Wasm. También es fundamental en el formato DWARF (Debugging With Attributed Record Formats), donde se emplea para codificar longitudes, offsets y otros metadatos de depuración. La JVM (Java Virtual Machine) utiliza una variante de LEB128, conocida como 'modified UTF-8', para codificar cadenas de caracteres, aunque con diferencias específicas en el manejo de caracteres nulos y de 2 y 3 bytes.
Para un arquitecto de sistemas, LEB128 es relevante por su impacto en la eficiencia del almacenamiento y la red. Su naturaleza de longitud variable significa que los números pequeños ocupan menos espacio, lo que es crucial en sistemas donde el ancho de banda o el espacio en disco son limitados, como en formatos de serialización binaria o protocolos de comunicación. Sin embargo, la decodificación requiere procesar los bytes secuencialmente hasta que se encuentra un byte sin el MSB establecido, lo que puede introducir una ligera sobrecarga computacional en comparación con la lectura de enteros de tamaño fijo. La elección de LEB128 frente a enteros de tamaño fijo (ej., `int32`, `int64`) debe sopesar la compacidad de los datos frente a la simplicidad y velocidad de acceso directo, especialmente en cargas de trabajo donde la mayoría de los valores son pequeños y la eficiencia del espacio es una prioridad.