已关闭。此问题需要更多focused。当前不接受答案。
**想要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。
21天前关闭。
Improve this question
当我研究fopen
以及FILE
结构是如何构建的时候,我发现它不仅仅是GNU libc
,我开始仔细研究各种实现,比如Google的Bionic
、Musl
Newlib
和其他几个。我只知道Musl
,直到现在我的理解是,它只是gnu libc
的一个更优化的版本。我没有考虑过如何,或者如果,他们是允许不同,以及他们如何可能在相同的方面相似。
具体地说,Posix和ANSIC
标准是如何规定各种实现的?这意味着所有fopen
和FILE
(所有libc函数/结构)都被确定为或多或少地构建相同的?还是它们是不透明的,只是遵循操作相同的“标准”(公开返回值和接口)?
直觉上,我会认为它就像我所描述的那样,但也许Musl
确实是从编译/链接中更有效地构建和优化的。
任何见解都是非常赞赏的。
1条答案
按热度按时间bqujaahr1#
具体地说,Posix和ANSI C标准是如何规定各种实现的?
它们并不是这样,它们只是规定了调用每个库函数的预期行为。
各种C标准库实现之间有什么区别
您可以将其分为2类:
strlen()
版本,您可能会得到2个几乎相同的简单版本,1个几乎相同但略有不同的简单版本,以及2个非常不同的复杂版本(并包含高度优化的内联汇编)。但是;将不是标准C库一部分的内容(例如,特定于操作系统的扩展和POSIX之类的扩展)推入同一个库是很方便的,因此C标准库的不同实现可以具有不同的扩展和/或不同版本的扩展。当然,标准C库的实现可以尝试是可移植的并且支持多个环境(例如,32位和64位代码)和多个操作系统(例如,具有大量
#ifdef ...
);因此在标准C库的源代码试图支持的目标方面也存在差异。