我想在 Linux 操作系统中添加一个自定义的 malloc 函数(例如“self_malloc()”)和一个选择函数(例如“selec_malloc()”)。
每当进程需要调用malloc进行内存分配时,操作系统都会调用selec_malloc()来决定调用原始malloc还是self_malloc()
也就是说,我想在调用malloc之前添加一个选择函数。那么有什么方法可以实现这一目标以及我需要做什么?
希望得到您的帮助。
malloc 不是 Linux 的一部分,而是 libc 的一部分。您可以提供您自己的 libc 版本以及不同的 malloc 实现。在这种情况下,您可以通过切换库搜索路径来在不同的 malloc 版本之间切换。
另一个选项是使用 LD_PRELOAD。这会在启动程序时预加载共享库。通过这种方式,您可以使用预加载库中的版本重载共享库中的函数。您甚至可以使用 dlsym 和 RTLD_NEXT 从代码中调用原始版本,如下所示:
typedef void *(*malloc_ptr)(size_t size);
void *malloc(size_t size) {
malloc_ptr _malloc;
_malloc=(malloc_ptr)dlsym(RTLD_NEXT,"malloc"); // look up original malloc()
return malloc_(size); // and invoke it
}
选择使用哪个malloc版本取决于LD_PRELOAD是否存在。如果设置,则使用预加载的malloc,如果不设置,则使用标准版本。
调用程序如下所示:
LD_PRELOAD=libmymalloc.so ./a.out
我是一名优秀的程序员,十分优秀!