gpt4 book ai didi

malloc - 如何通过代码替换默认的malloc

转载 作者:行者123 更新时间:2023-12-01 22:53:07 25 4
gpt4 key购买 nike

我想替换默认的 malloc 并添加一些统计信息以及泄漏检测和其他对 malloc 函数的行为。我已经看到了一些其他的实现,比如 gperftool 和 jemlloc。他们可以通过链接到他们的静态库来替换默认的 malloc。他们怎么能那样做?我想像那样实现我的自定义 malloc 函数。

最佳答案

您可以环绕原来的 malloc。

#include <dlfcn.h>

static void* (*r_malloc)(size_t) = NULL;

void initialize() {
r_malloc = dlsym(RTLD_NEXT, "malloc");
}
void* malloc(size_t size) {
//Do whatever you want
return r_malloc(size);
}

但不要忘记,您可能还必须环绕 calloc 和 realloc。并且libc中也有一些不太常用的函数来分配内存。

要包装 calloc,您需要做一个肮脏的 hack,因为 dlsym 尝试使用 calloc 分配内存,但实际上并不需要它。

static void* __temporary_calloc(size_t x __attribute__((unused)), size_t y __attribute__((unused))) {
return NULL;
}
static void* (*r_calloc)(size_t,size_t) = NULL;

并在初始化函数中添加:

r_calloc = __temporary_calloc;
r_calloc = dlsym(RTLD_NEXT, "calloc");

关于malloc - 如何通过代码替换默认的malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com