Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

What are the differences between the various C standard library implementations

While I was researching how fopen and moreover the structure FILE are built I found out it wasn’t all just GNU libc. I began to look closer at the various implementations such as Google’s Bionic, musl, Newlib and several others. Having only been aware of musl and up until now my understanding was that it was just a more optimized version of gnu libc. I hadn’t given much thought about how, or if, they are allowed to differ and how they are possibly similar with the same respect.

Specifically how does the Posix and ANSI C standard dictate the various implementations? Meaning are all fopen and FILE (all libc functions/structures) determined to be built more or less the same? Or is it that they are opaque and just held to the "standard" of operating the same (return values and interfaces exposed)?

Intuitively, I would think its as I have described but maybe musl is literally built more efficiently and optimized from compilation/linkage.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Any insight is greatly appreciated.

>Solution :

Specifically how does the Posix and ANSI C standard dictate the various implementations?

They don’t, they only dictate the expected behavior of calling each of the library’s functions.

What are the differences between the various C standard library implementations

You can split this into 2 categories:

  • implementations for different operating systems. E.g. a standard C library designed for Windows must use the Windows’ kernel API and/or depend on other Windows specific dynamically linked libraries, a standard C library designed for Linux must use the Linux kernel API, etc. For operating systems that use micro-kernels or exo-kernels the standard C library could be radically different (e.g. maybe "open()" sends a message to a different process).

  • implementations for the same OS. In this case most differences are likely minor. E.g. if you asked 5 different programmers to implement their own version of strlen() you might get 2 simple versions that are almost identical, 1 almost as simple version that is slightly different, and 2 complex versions that are very different (and contain highly optimized inline assembly). However; it’s convenient to shove things that aren’t part of the standard C library into the same library (e.g. OS specific extensions, and extensions like POSIX) so different implementations of the C standard library can have different extensions and/or different versions of extensions.

Of course an implementation of the standard C library can attempt to be portable and support multiple environments (e.g. 32-bit and 64-bit code) and multiple operating systems (e.g. with lots of #ifdef ...); so there’s also differences in which targets the source code of a standard C library tries to support.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading