如何使用 TCMalloc 通过其标头而不是 malloc,新

How to use TCMalloc by it's header but not instead of malloc, new

提问人:Frostmourne 提问时间:11/8/2023 更新时间:11/8/2023 访问量:54

问:

我正在将 TCMalloc 添加到我的项目中。我的方法是将 .a 链接到我的项目,所以所有的 malloc、新的、免费的......将被 TCMalloc 的实现所取代。但是由于某种原因,我项目中的一些 malloc 无法替换。所以现在,我想在头文件中使用 tc_malloc,但不要替换所有 malloc。我该怎么做?

我知道 malloc 是一个弱符号,所以如果将库链接到我的项目将替换它。你有一些方法只使用tc_malloc吗?

C++ malloc tcmalloc

评论

1赞 Paul Sanders 11/8/2023
但是由于某种原因,我的项目中的一些 malloc 无法替换什么原因?
0赞 Frostmourne 11/8/2023
因为我使用的是集群,其中主机核心和从属核心的内存是基于分段管理的。所以原点 malloc 被更改了,但我无法更改它。所以当集群初始化时,它会调用那个 malloc,哪个 tcmalloc 是错误的,在我的代码中,我想调用 tcmalloc。只是为了这个:-(
0赞 Frostmourne 11/8/2023
我认为tc_malloc给了我一个接口为 tc_malloc 的标头,所以我想要求只调用tc_malloc而不是替换所有 malloc。
1赞 molbdnilo 11/8/2023
我非常怀疑混合方法是否可行,因为两个分配者都认为他们可以随心所欲地做。
1赞 Frostmourne 11/9/2023
你是对的。我成功地避免了覆盖。但它看起来不能通过tcmalloc工作。也许我应该自己写一个分配器。谢谢大家。

答:

0赞 Botje 11/8/2023 #1

所有重写都位于默认编译的 libc_override.h 文件中。 但是,还有第二个目标不包括此文件。

bazel build //tcmalloc:tcmalloc_internal_methods_only应该会给你一个没有覆盖的 TCMalloc 库。

评论

0赞 Frostmourne 11/9/2023
是的,谢谢你的回答。我成功地获得了一个没有覆盖的 TCMalloc 库。