glibc
GNU项目的C标准库实现,是Linux系统上最常用的C库,提供ISO C和POSIX接口,qsort实现采用归并排序以保证稳定性
时间轴 (近 90 天)
Alpine Linux 使用 musl libc 和 BusyBox 替代常见的 glibc 与 GNU 核心工具,基础镜像体积仅几 MB。
glibc的qsort采用归并排序以保证稳定性,其他实现可能使用快速排序,qsort不仅不保证稳定性也未规定算法。
glibc 的默认分配器 ptmalloc 在高并发、大规模内存操作场景下容易产生内存碎片和锁竞争问题
底层工具链包括binutils(汇编器和链接器)、GCC、glibc(C标准库)和Linux内核头文件
GNU Guix通过Reduced Binary Seed项目从微型种子逐步构建出汇编器、C编译器,最终得到完整的GCC和glibc,形成完整可审计的信任链
Android使用的Bionic C库与标准的glibc存在显著差异,Bionic不支持某些POSIX接口且使用不同的动态链接器路径
glibc 由于大量使用 dlopen 和 NSS 插件机制,很难实现完全的静态链接,即使指定 -static 在运行时仍可能尝试加载共享库
Linux 生态中主要存在三种 libc 实现:glibc、musl 和 Bionic(Android 系统使用)
musl 的默认线程栈大小仅为 128KB,远小于 glibc 的 8MB
glibc 使用的 ptmalloc2 源自 Doug Lea 的 dlmalloc,采用 arena 机制为每个线程维护独立内存池以减少多线程锁竞争
还有 4 条时间轴事件
全部知识事实 (15)
常见的运行时内存分配器包括glibc的ptmalloc、jemalloc和tcmalloc
95%待验证Alpine Linux 使用 musl libc 和 BusyBox 替代常见的 glibc 与 GNU 核心工具,基础镜像体积仅几 MB。
50%待验证glibc的qsort采用归并排序以保证稳定性,其他实现可能使用快速排序,qsort不仅不保证稳定性也未规定算法。
50%待验证glibc 的默认分配器 ptmalloc 在高并发、大规模内存操作场景下容易产生内存碎片和锁竞争问题
50%待验证底层工具链包括binutils(汇编器和链接器)、GCC、glibc(C标准库)和Linux内核头文件
50%待验证GNU Guix通过Reduced Binary Seed项目从微型种子逐步构建出汇编器、C编译器,最终得到完整的GCC和glibc,形成完整可审计的信任链
50%待验证Android使用的Bionic C库与标准的glibc存在显著差异,Bionic不支持某些POSIX接口且使用不同的动态链接器路径
50%待验证glibc 由于大量使用 dlopen 和 NSS 插件机制,很难实现完全的静态链接,即使指定 -static 在运行时仍可能尝试加载共享库
50%待验证Linux 生态中主要存在三种 libc 实现:glibc、musl 和 Bionic(Android 系统使用)
50%待验证musl 的默认线程栈大小仅为 128KB,远小于 glibc 的 8MB
50%待验证glibc 使用的 ptmalloc2 源自 Doug Lea 的 dlmalloc,采用 arena 机制为每个线程维护独立内存池以减少多线程锁竞争
50%待验证从基于 glibc 的镜像迁移到 Alpine(musl)后,应用可能出现 10% 到数倍不等的性能下降
50%待验证musl 的 DNS 解析器不支持 NSS、不支持 mDNS,且早期版本以串行方式发送 A 和 AAAA 查询而非 glibc 的并行方式
50%待验证glibc 的 DNS 解析通过 NSS(Name Service Switch)框架实现,支持通过 /etc/nsswitch.conf 配置多种名称解析后端
50%待验证Alpine Linux选择musl libc作为默认C库,musl静态链接后的二进制文件通常比glibc版本小5-10倍
50%