C语言 Linux 上使用的 malloc 版本



我只是在 glibc 中查看malloc.c文件顶部的注释,它是这样说的:

默认情况下,您可能已经在使用包含 malloc
的 C 库 这是基于此 malloc 的某个版本(例如在
Linux)。您可能仍希望使用此文件中的那个,以便
自定义设置或避免与库
相关的开销 版本。

我不明白为什么 glibc 代码会说一个版本的 Linux 可能使用与 glibc malloc.c 中的代码不同的东西?有人可以帮忙重新措辞它的含义吗?我以为glibc malloc()是每个Linux都会用于内存管理的?

之所以这样说,是因为glibc中的malloc实现是基于ptmalloc的,而ptmalloc又是基于Doug Lea malloc实现的,这些评论来自该实现。该 malloc 实现被导入并在 glibc 版本 2.3 中成为默认值。

由于 ptmalloc/Doug Lea 的 malloc 实现是一个单独的库,您可以使用它来替换系统上的标准 malloc(),因此应用了这些注释。但是在将该库引入 glibc 时保留了注释。

您可以

链接提供malloc的不同库(例如,某些libmalloc或libtcmalloc ...看到这里。

您可以链接不同的libc,例如MUSL libc提供自己的malloc。所以你可以有一个不使用GNU libc malloc的Linux应用程序...

GNU libc 可以在其他系统(Hurd、Solaris、AIX)上使用,拥有自己的系统malloc......

某些应用程序可能会提供自己的malloc或某些包装器。(想想libgc...

你可以玩LD_PRELOAD把戏来超载malloc,看到这个。

您的应用程序可以是静态链接的(例如,到旧版本的libc或 MUSL libc...你甚至可能有几个libc....(GNU libc 的几个版本)。

相关内容

  • 没有找到相关文章

最新更新