首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jemalloc和tcmalloc如何跟踪线程?

jemalloc和tcmalloc如何跟踪线程?
EN

Stack Overflow用户
提问于 2019-04-24 17:46:45
回答 1查看 241关注 0票数 0

现在我正在积极研究内存管理器jemalloctcmalloc的代码。但是我不能理解这两个管理器是如何跟踪线程的。

如果我理解正确的话,可以在内存分配期间检测到新的线程,然后创建一个新的线程缓存。但是,tcmalloc / jemalloc如何检测线程何时被销毁,并释放附加到它的线程缓存以供将来使用呢?

谷歌的搜索结果甚至无法提供任何有用的信息。

EN

回答 1

Stack Overflow用户

发布于 2019-04-24 18:35:23

我只能回答jemalloc,但它的工作方式是,当创建线程缓存时,它与该线程的线程特定数据相关联。

当你创建线程特定的数据时,你可以给它一个“析构函数”,它在线程被销毁时被调用。如果您使用的是pthread,则使用pthread_key_create例程,这是创建特定于线程的数据的C方法。

在使用jemalloc的情况下,tcache.h中有一些代码,它将tcache_thread_cleanuptcache数据挂钩(我的源代码jemalloc-3.0.0):

代码语言:javascript
复制
143 malloc_tsd_funcs(JEMALLOC_INLINE, tcache, tcache_t *, NULL,
144     tcache_thread_cleanup)

因此,当线程退出时,析构函数将被调用。它将获得指向该线程的缓存的指针,并在此时运行tcache_thread_cleanup例程。

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

https://stackoverflow.com/questions/55827117

复制
相关文章

相似问题

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