在我的程序中使用OpenBSD的malloc,realloc和free

我想在我的Debian lenny桌面上使用OpenBSDmalloc,realloc和free,而不是glibc。

  1. 他们是否只是在replace:他们会在我的Linux桌面上工作?

  2. 哪些是我需要的文件,哪些OpenBSD软件包包含它们?

Solutions Collecting From Web of "在我的程序中使用OpenBSD的malloc,realloc和free"

Google在http://code.google.com/p/google-perftools/wiki/GooglePerformanceTools上有自己的malloc替换库,并提供了使用说明。 他们说你需要做的就是把它链接到(在标准版本链接之前)来使用它。

我不知道是否有什么特别的OpenBSD版本可以防止这种情况。 如果它是malloc和其他一些标准库的东西在一起它可能会更困难,虽然。

从技术上讲,它使用mmap(2)是非常便携的,但不能复制和粘贴。

以供参考:

这些文件是:

http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c

http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/crypt/arc4random.c

http://www.openbsd.org/cgi-bin/cvsweb/~checkout~/src/lib/libc/include/thread_private.h

再加上一对定义:

PGSHIFT必须是系统页面大小的log2。 而且MADV_FREE是AFAICT在Linux中不可用的标志。

当然,线程代码需要完全替换。

这里: http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c : http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c

尽管你可能需要引入一些依赖关系。

您可以像使用其他 (1) 替换 (2) malloc()子系统一样使用它。

在第一个例子中, malloc()通常被替换为:

 #define malloc(n) GC_malloc(n) #define calloc(m,n) GC_malloc((m)*(n)) ... #define free(n) GC_free(n) 

然后,您将链接到新的malloc()库(静态或动态)。

在第二个例子中, LD_PRELOAD被用来拦截对malloc() / free()调用。

我建议你做的是第一个选项,创建一个名为bsdmalloc的静态/共享对象,并根据需要链接它。

您也可以选择使用代码构建BSD malloc例程,就像其他任何模块一样(粗略的例子,只包含malloc的原型的stdlib):

 #include <stdlib.h> #define malloc(n) BSD_malloc(n) void *BSD_malloc(int n) { return NULL; } int main(void) { char *ret; ret = (char *) malloc(1024); return ret == NULL ? 1 : 0; } 

对于更系统的方法,我真的建议去共享对象的路线。