我只是在 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 的几个版本)。