GNU C Library 2.43 已發佈,GNU C Library 被設計為可移植和高性能的 C 庫。它遵循所有相關標準,包括 ISO C11 和 POSIX.1-2017,也是已知的最完善的國際化接口之一,廣泛應用於 GNU/Linux 系統以及其他使用 Linux 內核的系統。
主要新功能:
- ISO C23 free_sized、free_aligned_sized、memset_explicit 和 memalignment functions 已添加。
- 根據 ISO C23 的規定,assert 宏被定義為支持可變參數,以便在複合字面量初始化器中處理未用括號包圍且包含逗號的表達式。
- 對於ISO C23,以下函數(bsearch、memchr、strchr、strpbrk、strrchr、strstr、wcschr、wcspbrk、wcsrchr、wcsstr和wmemchr)在返回指向輸入數組內部的指針時,現已定義為宏:當輸入參數是指向常量限定類型的指針時,這些宏將返回指向常量限定類型的指針。
- ISO C23 typedef 名稱 long_double_t、_Float32_t、_Float64_t 以及(在支持 _Float128 的平台上)_Float128_t(引入於 TS 18661-3:2015)已添加至 <math.h>。
- ISO C23 可選時間基準 TIME_MONOTONIC、TIME_ACTIVE 和 TIME_THREAD_ACTIVE 已被納入。
- 在 Linux 系統上,新增了 mseal 函數。該函數可對內存映射進行封裝,防止進程執行期間發生進一步修改,例如保護權限變更、取消映射、遷移至其他位置或縮小內存規模。
- 從 CORE-MATH 項目引入了更多經過優化的數學函數,並實現了正確的舍入處理,特別是 acosh、asinh、atanh、erf、erfc、lgamma 和 tgamma 等函數。
- 新增了針對 fma、fmaf、remainder、remaindef、frexpf、frexp、frexpl(binary128)和 frexpl(intel96)的優化實現。
- acosf、acosf、asinhf、atan2f、atanhf、coshf、fmodf、lgammaf/lgammaf_r、log10f、remainderf、sinhf、sqrtf、tgammaf、y0/j0、y1/j1 和 yn/jn 的 SVID 處理已移至兼容符號,從而提升了性能。
- 新增了使用 clang 編譯的實驗性支持。該功能要求至少使用 clang 18 版本,支持 aarch64-linux-gnu 或 x86_64-linux-gnu 目標架構,並需配備與 libgcc 兼容的運行時庫(包括用於 pthread 取消和回溯運行時支持的 libgcc_s.so)。
- 在 Linux 系統中新增 openat2 函數。該函數是對 openat 的擴展,提供其功能的超集。僅在 LFS 模式下支持,且為可取消的入口點。
- 在 AArch64 架構上,malloc默認啓用了對2MB透明巨頁的支持(類似於設置 glibc.malloc.hugetlb=1 tunable)。
- 對於支持 Scalable Matrix Extension (SME) 的AArch64 Linux目標平台,clone()系統調用封裝器將禁用SME的ZA狀態。
- 在支持 Branch Target Identification (BTI) 擴展的AArch64目標平台上,可通過glibc.cpu.aarch64_bti可調參數強制要求進程內所有二進制文件支持BTI功能。
- 在支持至少一種分支保護擴展(如分支目標識別或受保護控制堆棧)的AArch64 Linux目標平台上,可通過設置LD_DEBUG=security使動態鏈接器對加載的二進制文件發出警告,提示其不支持相應的安全特性。
- 在AArch64架構上,新增了C23版本exp2m1、exp10m1、log10p1、log2p1及rsqrt函數的向量變體。
- 在 RISC-V 上,添加了針對 RVV 優化的 memset 實現。
- 在x86架構上,新增對英特爾Nova Lake和Wildcat Lake處理器的支持。
- 測試套件已得到顯著改進,尤其在scanf、strerror、strsignal函數及多線程測試方面。
- Unicode 支持已更新至 Unicode 17.0.0。
- 手冊已更新並現代化,特別是其中大量代碼示例也進行了相應調整。
更多詳情可查看此處。