gpt4 book ai didi

c++ - 如何在Linux中添加自定义的malloc

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:45 28 4
gpt4 key购买 nike

我想在 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

关于c++ - 如何在Linux中添加自定义的malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41439065/

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