首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在共享库中使用tcmalloc

在共享库中使用tcmalloc
EN

Stack Overflow用户
提问于 2020-11-10 11:27:16
回答 1查看 737关注 0票数 3

我有许多与tcmalloc (.a)链接的可执行文件。我通常在可执行级别执行,这样由可执行文件加载的任何共享库都可以从tcmalloc中获益。

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

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

如果用户的可执行文件本身没有与tcmalloc链接,会发生什么情况?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-10 11:40:36

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

这取决于以下几点:

  • 您的共享库是否与tcmalloc链接,以便将mallocoperator new公开为外部符号。正常情况下是这样的。
  • 无论您的库的用户链接到您的库,还是使用dlopen在运行时加载它,以及使用什么dlopen选项。

如果用户的可执行文件本身没有与tcmalloc链接,会发生什么情况?

这两件事之一是可以发生的:

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

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

你可能会喜欢学习Unix链接器是如何工作的来回答你将来的这些问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64768037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档