jemalloc和tcmalloc如何跟踪线程?

时间:2019-04-24 09:46:45

标签: c multithreading tcmalloc jemalloc

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

如果我理解正确,可以在分配内存的过程中检测到新线程,然后创建新的线程缓存。但是tcmalloc / jemalloc如何检测线程何时被销毁,并且可以释放附加到该线程的线程缓存以备将来使用?

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

1 个答案:

答案 0 :(得分:0)

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

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

对于jemalloc,tcache.h中有一些代码,将tcache_thread_cleanuptcache数据挂钩(我的源代码jemalloc-3.0.0):

143 malloc_tsd_funcs(JEMALLOC_INLINE, tcache, tcache_t *, NULL,
144     tcache_thread_cleanup)

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