Bionic C与 Glibc 比较

时间:2022-09-26 05:31:01

本文讲述内容主要是总结Bionic vs Glibc Report Master Thesis一文



Android 使用Bionic C 而不使用Glic的最主要原因:
1,有限的空间和存储
2,较低的CPU速度
3,不完全开源


Bionic C 优势
1,去除头文件的相关内容,占用更小的存储
2,规避GPL
3,占用更小的空间,Bionic 大约 200KB, Glibc 400KB,(去除臃肿的代码以及不必要的功能)
4,低速CPU优化,主要源于对pthread的优化,这也是一个缺点,因为他只专门为低时钟频率的 CPU设计



Bionic C的限制和缺点
1,c++ (详情见“libc/CAVEATS”)
__1, 异常处理 不支持
__2,STL 不支持


2,Pthreads
__1,Cancellation 不支持
__2,pthread_once() 不支持 初始化函数和初始化函数调用fork()的异常处理
__3,pthread_atfork()函数 不支持


3,其他项
___1,不支持区域和宽字符,程序员应该使用Unicode
___2,用户账户相关功能,没有真正实现,这是目前只支持单用户的原因
___3,ABI bugs
_____1,time_t is 32 bit
_____2,off_t is 32 bit (off64_t is present but no _FILE_OFFSET_BITS support)
_____3,sigset_t is too small on ARM (android devices) and x86 (but correct on MIPS),
______so support for real-time signals is broken
_____4,Too few TLS slots leading to allocation shortage for pthread_key_t (should be
______128, but can’t be reached)
_____5,atexit(3) handlers registered by a shared library aren’t called on dlclose(3). Only
______affects ARM

结论:
Bionic C是一个轻量级的库,有一些限制非常严格,如C++的限制,其他可以被绕过。


参考文档:Bionic vs Glibc Report Master Thesis 共享地址:http://pan.baidu.com/s/1tdj83