另一方面 , C++标准库的实现位于libstdc++或GNU标准C++库中 。这是一个正在进行的在GNU/Linux上实现标准C++库的项目 。一般来说 , 所有常规的Linux发行版都默认使用libstdc++ 。
mac和IOS版实现
在Mac和iOS上 , C标准库的实现是libSystem的一部分 , libSystem是位于/usr/lib/libSystem.dylib中的核心库 。LibSystem包含其他组件 , 如数学库、线程库和其他底层实用程序 。
关于C++标准库 , 在OS X Mavericks(V10.9)之前的Mac上 , libstdc++是默认选项 。这在现代的基于Linux的系统上可以找到的同样的实现 。自OS X Mavericks开始 , Apple切换到使用libc++ , 这是LLVM项目——Mac官方编译器框架——所引入的GNU libstdc++标准库的替代 。
IOS开发者可以使用iOS SDK(软件开发工具包)来访问标准库 , 它是一系列允许创建移动应用程序的工具 。
windows版实现
在Windows上 , 标准库的实现一直严格限定在Visual Studio中 , 它是微软官方的编译器 。他们通常称之为C/C++运行时库(CRT) , 并且它涵盖了c/c++二者的实现 。
在最开始 , CRT被实现为CRTDLL.DLL库(我猜 , 当时没有可用的C++标准库) 。从Windows 95开始 , Microsoft开始将其迁移到MSVCRT [版本号].DLL(MSVCR20.DLL , MSVCR70.DLL等)之上 , 据推测也包含C++标准库 。在1997年左近 , 他们决定将文件名简化为MSVCRT.DLL , 这不幸导致了令人讨厌的DLL混乱 。这就是为什么从Visual Studio 7.0版开始 , 他们切换回每个版本使用单独的DLL了 。
Visual Studio 2015引入了深度的CRT重构 。C/C ++标准库的实现迁移到一个新库 , Universal C运行时库 (Universal CRT或UCRT) , 编译为UCRTBASE.DLL 。UCRT目前已经成为Windows组之一 , 从Windows 10开始作为操作系统的一部分提供 。
Android版实现
Bionic是google为其Android操作系统所编写的C标准库实现 , 它直接在底层使用 。第三方开发者可以通过Android原生开发工具包(NDK)访问Bionic , 该工具集允许你使用C和C++代码编写Android应用程序 。
在 C++ 端, NDK提供了很多版本的实现:
libc++ , 从从Lollipop开始的官方安卓系统和现代Mac操作系统都将其作为C++标准库使用 。从NDK发布17版本开始 , 它将成为NDK中唯一可用的C++标准库实现;
gnustl , libstdc++的别名 , 这两者在GNU/linux是同一个库 。这个库的已被弃用 , 它将在NDK发布18中删除;
STLport , 由STLport项目编写的C++标准库的第三方实现 , 自2008年以来一直处于不活跃状态 。与gnustl一样 , STLport将在NDK发布18中移除 。
我能使用不同版本的实现代码来替代默认实现吗?
如果你正在使用资源非常有限的系统 , 则通常需要引用C标准库的不同实现 。比如 , uClibc-ng, musl libc和diet libc等等 , 所有这些都适用于嵌入式Linux系统的开发 , 提供更小的二进制文件和更少的内存占用 。
C++标准库也有不同的实现版本:Apache C++标准库 , uSTL以及EASTL等等 。后面两个实际上仅关注模板部分 , 而不是完整的库 , 并且他们是在速度优先的情况下开发的 。Apache版本的库注重的是可移植性 。
如果我们脱离了标准库怎么办?
不使用标准库很简单:只要在你的程序中不引入它们的任何一个头文件 , 你的工作就完成了 。然而 , 为了让这个操作更有意义一些 , 你需要通过一些提供的系统调用使用某种方法与操作系统互动 。就像我之前说的 , 这就是标准库中的函数/方法在底层实现的时候所使用的 。很可能你也会不得不调用这些方法来与硬件设备交互 。
如果对你来说这听起来很让人激动 , 有些人已经开始在网上尝试在不导入标准库的情况下创建工作流程 。因为你依赖于一个特定操作系统所提供的函数 , 这种方式会丧失可移植性 。然而通过使用这种艰难的方式 , 肯会让你学到更多 , 而且让你更好的理解当你所做的事情 , 即使是在使用高级库的时候 。
除了知识 , 当你在嵌入式操作系统上面工作的时候你不会想去引入标准库:因为代码不需要移植 , 在有限的内存中每个字节都很重要 , 这会让你更加精准的写代码 。另一个使用背景就是demoscene , 在这里人们尽量有限的程序的二进制大小中去保留高质量的音视频——4K仍然不是最小值:一些demoparties使用1K , 256字节 , 64字节或者甚至32字节来竞争 。在那里不允许使用标准库!
推荐阅读
- 电话费充值不到账是什么情况呢 手机充值话费没到账怎么回事
- 梦见路上到处都是屎 梦见路很脏有屎
- 什么是编译器?什么是集成开发环境?一文讲明白
- 昔归冲泡方法
- 金单丛极品冲泡方法
- 如何在 CentOS 8/RHEL 8 上安装和使用 Cockpit
- 谈一谈HTTP和WebSocket的区别
- mysql 如何查看sql语句执行时间和效率
- 简单质朴的粗陶茶具
- 店铺开通花呗需要什么条件 开淘宝网店怎么开通花呗
