我想要替换默认malloc和一些统计数据,以及泄漏检测等品行增加的malloc函数。 我已经看到了一些其他imlementations像gperftool和jemlloc。 他们可以通过与他们的静态库链接替换默认的malloc。 他们怎么能这样做呢? 我想实现这样的我自定义的malloc函数。
Answer 1:
您可以环绕原有的malloc。
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(bsize);
}
但不要忘了,你还必须围绕释放calloc和realloc可能包裹。 而且也有不常用的功能,在libc中分配内存。
为了总结释放calloc你需要做一个肮脏的黑客,因为对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");
文章来源: how to replace default malloc by code