哪些文件包含 malloc() 和 new() 的实现?
Posted
技术标签:
【中文标题】哪些文件包含 malloc() 和 new() 的实现?【英文标题】:Which files contains the implementations for malloc() and new()? 【发布时间】:2013-06-23 14:31:19 【问题描述】:在 Linux (Ubuntu) 上,我可以看到 malloc() 和 new() 实现中使用的 C/C++ 代码的路径和文件名是什么?
我查看了 /usr/include 但开始迷路了。它是否取决于我安装的 gcc/g++ 版本?
如果有人也能给出一个一般性的答案,这将帮助我了解 Linux 如何存储所有“本机”功能,那将不胜感激,我再也不必再要求不同的功能了。
【问题讨论】:
您可以在编译器使用的 C 标准库的实现中找到它。 查看 glibc 源码:gnu.org/software/libc 为什么要这些资源?你在网上搜索过吗?你知道 C 和 C++(没有 C/C++ 之类的东西)是编译成机器码的语言吗? @JensGustedt malloc() 在 C 中使用,而 new() 在 C++ 中使用,因此短语“C/C++”。我没有争论它们没有被编译成机器代码。我一直理解在 Linux 中你可以看到操作系统中的所有代码,因此我的问题是“new() 的代码在哪里?” 【参考方案1】:一件事:new
是一个使用malloc
的 C++ 关键字。
malloc
的源代码在您的libc
版本的源代码中,可能是glibc
。查看它们的来源。
system 调用的其他内置函数仅在 glibc
中具有调用底层系统调用的 shell 实现。
【讨论】:
@user997112:不,我只是指glibc
的代码,GNU libc 实现。
@Linuxios- 如何在我的 Ubuntu 文件系统中找到它?就像打开包含上述函数的 C/C++ 的文件一样?当我搜索 glibc 时,我只有一个充满 .so 文件的文件夹。
@user:他们不是本地的。您必须下载编译成这些 .so 文件的 c 源代码。
@Linuxios 顺便说一句,当你在静态编译时,你不会加载 .so 文件。在这种情况下,编译器如何以及做什么?
@Maxime:我不太明白【参考方案2】:
The GIT of the GNU standard C lib implementation can be found here.
从树中的这一点您应该能够找到the rest as well。
【讨论】:
我认为我的 Ubuntu 文件系统上没有包含 malloc/new 实现的 .c 或 .cpp 文件是否正确?它们包含在一个.... .so 中?文件,这就是为什么我必须在线检查实现? 是的,用于构建 C 库的文件通常不包含在发行版中 - 有时源代码将包含在单独的包中,您可以单独安装,或者您可以在网站上找到它就像这个答案中建议的那样。【参考方案3】:“实现”是您可以链接的库(“a”文件或“so”文件)以及包含声明的标头(“h”文件)。
C 和 CPP 文件位于创建这些库的计算机上,然后才用于构建您的系统。而且由于您的程序不需要它们的源代码(您只需链接二进制文件,而不是源代码),它们不会与系统构建一起分发。
这就是您必须从源存储库下载这些文件的原因,就像您希望自己重建系统一样。
【讨论】:
【参考方案4】:您可以在编译器使用的 C 标准库的实现中找到它。
我不确定 Ubunta。 Debian 的 gcc 使用 eglibc,其来源为 could be found here。
【讨论】:
有没有办法在文件系统中找到实现? 您可能还想查看MUSL libc,其源代码可能更易于阅读。 MUSL libc 是另一种免费的 LibC 实现。 @user997112:默认情况下,libc 实现采用二进制格式,但对于开源版本,可以下载源代码。以上是关于哪些文件包含 malloc() 和 new() 的实现?的主要内容,如果未能解决你的问题,请参考以下文章