17 Punkte von baeba 2025-05-12 | Noch keine Kommentare. | Auf WhatsApp teilen

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)

  • musl und dietlibc sind sehr leichtgewichtig und können sehr kleine ausführbare Dateien erzeugen (static hello: 13k vs. 662k bei glibc).
  • glibc ist 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

  • musl meldet Fehler klar und verarbeitet viele Fälle ohne abnormalen Abbruch.
  • glibc und uClibc brechen bei Speichermangel teils mit abort ab oder behandeln Ausnahmen nicht korrekt.
  • dietlibc hat einige Funktionen entweder gar nicht implementiert oder nur in sehr rudimentärer Form.

4. Leistungsvergleich

  • glibc zeigt die beste Leistung bei Speicheroperationen (strchr, memset usw.) und I/O (putc/getc).
  • musl bietet eine ausgewogene Leistung bei niedrigem Overhead und ist konkurrenzfähig.
  • dietlibc ist bei strstr, putc/getc und threadbezogenen Operationen deutlich langsamer.

5. ABI-Stabilität und Versionskompatibilität

  • musl und glibc bieten ABI-Stabilität und Kompatibilität, aber nur glibc unterstützt Symbol-Versionierung.
  • dietlibc und uClibc sind bei ABI- und Versionskompatibilität insgesamt unzureichend oder nur inoffiziell.

6. Algorithmen und interne Implementierung

  • musl und glibc verwenden fortgeschrittene Teilstring-Suche (twoway), DFA-basierte reguläre Ausdrücke und performanceorientiertes malloc.
  • dietlibc ist mit naive quicksort und regex per Backtracking bei Leistung und Stabilität im Nachteil.
  • Sortier- und Speicherallokationsalgorithmen sind bei glibc mit introsort, ptmalloc usw. weiterentwickelt.

7. Umfang von Funktions-/Standardunterstützung

  • glibc unterstützt nahezu alle C99/C11- und POSIX-Funktionen und bietet zudem breite Unterstützung für Locale, iconv und Debugging-Funktionen.
  • musl implementiert die essenziellen Funktionen standardkonform und bleibt dabei klein.
  • dietlibc ist bei den meisten Funktionen unvollständig oder mangelhaft und bietet nur geringe POSIX-Kompatibilität.

8. Unterstützung für Architekturen und Build-Umgebungen

  • musl unterstü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.
  • dietlibc unterstützt nur ein Minimum an Architekturen und ist bei Portabilität und Build-Flexibilität schwächer.

Noch keine Kommentare.

Noch keine Kommentare.