17 ポイント 投稿者 baeba 2025-05-12 | まだコメントはありません。 | WhatsAppで共有

1. プロジェクト概要と目的

Eta Labs は、Linux 向け C/POSIX 標準ライブラリ実装を、機能性と軽量性(“bloat”)を中心に比較した。比較対象は musl、uClibc、dietlibc、glibc で、今後は bionic および BSD libc も追加される予定。

2. メモリ使用量と軽量性の比較(Bloat)

  • musldietlibc は非常に軽量で、小さな実行ファイルを作成できる(static hello: 13k vs glibc の 662k)。
  • glibc は全体の .so サイズが 7.9M に達し最も重いが、iconv など多くの機能を含む。
  • uClibc は多くの選択的機能を含めた状態でテストされた。

3. リソース不足時の対応

  • musl は失敗を明確に報告し、異常終了せずに処理できる場合が多い。
  • glibcuClibc は、メモリ不足時に abort したり、例外を適切に処理できなかったりする場合がある。
  • dietlibc は一部機能がそもそも未実装、またはごく限定的な処理しか行えない。

4. 性能比較

  • glibc はメモリ演算(strchr、memset など)と I/O(putc/getc)で最高の性能を示す。
  • musl はバランスの取れた性能と低いオーバーヘッドを示し、十分に競争力がある。
  • dietlibc は strstrputc/getcthread 関連の演算で圧倒的に遅い。

5. ABI 安定性とバージョン互換性

  • muslglibc は ABI の安定性と互換性を提供するが、シンボルのバージョン管理をサポートするのは glibc のみ。
  • dietlibcuClibc は全体的に ABI 互換性とバージョン互換性の面で不十分、または非公式である。

6. アルゴリズムと内部実装

  • muslglibc は高度な部分文字列検索(twoway)、DFA ベースの正規表現、性能重視の malloc を採用している。
  • dietlibc は naive quicksort や backtracking regex などにより、性能と安定性の面で弱い。
  • ソートおよびメモリ割り当てアルゴリズムは、glibc が introsortptmalloc などで高度化されている。

7. 機能/標準サポート範囲

  • glibc はほぼすべての C99/C11 および POSIX 機能をサポートし、ロケール、iconv、デバッグ機能まで幅広い。
  • musl は必須機能に準拠しつつ、小さなサイズで実装されている。
  • dietlibc は大半の機能が不完全または不足しており、POSIX 互換性も低い。

8. アーキテクチャとビルド環境のサポート

  • musl は主要なアーキテクチャ(x86、ARM、MIPS など)の大半を広くサポートし、non-MMU 環境まで考慮している。
  • glibc は伝統的に最も広範なサポートを提供しており、広く配布されている。
  • dietlibc は最小限のアーキテクチャしかサポートせず、移植性とビルドの柔軟性に欠ける。

まだコメントはありません。

まだコメントはありません。