gpt4 book ai didi

c++ - 在共享库中使用 tcmalloc

转载 作者:行者123 更新时间:2023-12-03 06:53:52 27 4
gpt4 key购买 nike

我有许多与 tcmalloc (.a) 链接的可执行文件。我通常在可执行文件级别执行此操作,以便可执行文件加载的任何共享库都受益于 tcmalloc。

但是,我有一个场景需要向用户提供一个 .so 库。

可以在那个共享库中使用 tcmalloc 吗?

如果用户的可执行文件本身没有与 tcmalloc 链接会怎样?

谢谢。

最佳答案

Is it ok to use tcmalloc in that shared library?

这取决于一些事情:

  • 您的共享库是否以将 mallocoperator new 作为外部符号公开的方式与 tcmalloc 链接。通常情况下,它会。
  • 您的库的用户是链接到您的库还是在运行时使用 dlopen 加载它,以及使用了哪些 dlopen 选项。

What happens if the user's executable itself is not linked with tcmalloc?

以下两种情况之一可能会发生:

  1. malloc 已经是用户应用程序/进程中的解析符号。在这种情况下,您的 .so 使用那个 malloc。当用户使用 dlopen 加载您的 .so 时会发生这种情况。
  2. malloc 尚未解析,因此用户的应用程序/进程使用来自 .so 的 tcmalloc 的 malloc。当用户在链接器命令行中链接到您的 .so 并且您的 .so 出现在 -lc 之前时,就会发生这种情况。

对于您的 .so 来说,根本不链接 tcmalloc 可能是最稳健的。然后,应用程序的用户可以通过链接到 tcmalloc 或其他分配器来决定使用哪个 malloc 实现,或者通过在运行时使用 LD_PRELOAD 预加载它们来尝试不同的分配器>.

你可能喜欢学习how Unix linkers work以后自己回答这样的问题。

关于c++ - 在共享库中使用 tcmalloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64768037/

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