1. Projektüberblick und Ziel
Eta Labs hat Implementierungen der C/POSIX-Standardbibliothek für Linux mit Fokus auf Funktionalität und Schlankheit („Bloat“) verglichen. Verglichen wurden musl, uClibc, dietlibc und glibc; künftig sollen auch bionic und BSD-libcs ergänzt werden.
2. Vergleich von Speicherverbrauch und Schlankheit (Bloat)
muslunddietlibcsind sehr leichtgewichtig und können sehr kleine ausführbare Dateien erzeugen (static hello: 13k vs. 662k bei glibc).glibcist mit einer gesamten.so-Größe von 7.9M die schwergewichtigste Variante, enthält dafür aber viele Funktionen wie iconv.- uClibc wurde mit vielen optionalen Funktionen aktiviert getestet.
3. Umgang mit Situationen knapper Ressourcen
muslmeldet Fehler klar und verarbeitet viele Fälle ohne abnormalen Abbruch.glibcunduClibcbrechen bei Speichermangel teils mit abort ab oder behandeln Ausnahmen nicht korrekt.dietlibchat einige Funktionen entweder gar nicht implementiert oder nur in sehr rudimentärer Form.
4. Leistungsvergleich
- glibc zeigt die beste Leistung bei Speicheroperationen (
strchr,memsetusw.) und I/O (putc/getc). - musl bietet eine ausgewogene Leistung bei niedrigem Overhead und ist konkurrenzfähig.
- dietlibc ist bei
strstr,putc/getcund threadbezogenen Operationen deutlich langsamer.
5. ABI-Stabilität und Versionskompatibilität
muslundglibcbieten ABI-Stabilität und Kompatibilität, aber nurglibcunterstützt Symbol-Versionierung.dietlibcunduClibcsind bei ABI- und Versionskompatibilität insgesamt unzureichend oder nur inoffiziell.
6. Algorithmen und interne Implementierung
muslundglibcverwenden fortgeschrittene Teilstring-Suche (twoway), DFA-basierte reguläre Ausdrücke und performanceorientiertes malloc.dietlibcist mit naive quicksort und regex per Backtracking bei Leistung und Stabilität im Nachteil.- Sortier- und Speicherallokationsalgorithmen sind bei glibc mit
introsort,ptmallocusw. weiterentwickelt.
7. Umfang von Funktions-/Standardunterstützung
glibcunterstützt nahezu alle C99/C11- und POSIX-Funktionen und bietet zudem breite Unterstützung für Locale, iconv und Debugging-Funktionen.muslimplementiert die essenziellen Funktionen standardkonform und bleibt dabei klein.dietlibcist bei den meisten Funktionen unvollständig oder mangelhaft und bietet nur geringe POSIX-Kompatibilität.
8. Unterstützung für Architekturen und Build-Umgebungen
muslunterstützt die meisten wichtigen Architekturen (x86, ARM, MIPS usw.) breit und berücksichtigt sogar non-MMU-Umgebungen.- glibc bietet traditionell die umfassendste Unterstützung und ist weit verbreitet.
dietlibcunterstützt nur ein Minimum an Architekturen und ist bei Portabilität und Build-Flexibilität schwächer.
Noch keine Kommentare.