为什么 tcache bin 与 arena 相关联?
Why a tcache bin is associated with an arena?
我正在使用 Ubuntu 18.04 和 glibc-2.27
,一个部署了 tcache
重新分配系统的发行版。在使用 gdb
+ gef
(又名 GDB Enhanced Features)调试一些图像时,我注意到 tcache
bin 与竞技场相关联。
通用 heap bins
命令输出如下所示:
gef➤ heap bins
───────────── Tcachebins for arena 0x7ffff7dcfc40 ───────────────────────────────────────────────────────────────────────────────────────
Tcachebins[idx=0, size=0x10] count=1 ← Chunk(addr=0x555555756260, size=0x20, flags=PREV_INUSE)
从输出中可以看出,tcache
垃圾箱与竞技场相关联。这对我来说看起来很奇怪,因为 tcache
的整个想法(至少我得到它的方式)是为了避免由锁定竞技场引起的线程之间的竞争。
我在 glibc wiki 上做了一些 Malloc Internals 的研究,我发现了我已经知道的东西:
Each thread has a per-thread cache (called the tcache) containing a small collection of chunks which can be accessed without needing to lock an arena.
那么,arenas和tcache
bins是什么关系呢?如果我可以在不锁定竞技场的情况下访问 tcache
为什么 gef
打印竞技场(地址)?感谢您的澄清!
这似乎是 GDB 插件中的演示问题。 tcache 的实例与线程相关联,而不是与竞技场相关联。一个 tcache 实例可以包含来自多个不同领域的分配,而不仅仅是当前与 tcache 所属线程关联的领域。
我正在使用 Ubuntu 18.04 和 glibc-2.27
,一个部署了 tcache
重新分配系统的发行版。在使用 gdb
+ gef
(又名 GDB Enhanced Features)调试一些图像时,我注意到 tcache
bin 与竞技场相关联。
通用 heap bins
命令输出如下所示:
gef➤ heap bins
───────────── Tcachebins for arena 0x7ffff7dcfc40 ───────────────────────────────────────────────────────────────────────────────────────
Tcachebins[idx=0, size=0x10] count=1 ← Chunk(addr=0x555555756260, size=0x20, flags=PREV_INUSE)
从输出中可以看出,tcache
垃圾箱与竞技场相关联。这对我来说看起来很奇怪,因为 tcache
的整个想法(至少我得到它的方式)是为了避免由锁定竞技场引起的线程之间的竞争。
我在 glibc wiki 上做了一些 Malloc Internals 的研究,我发现了我已经知道的东西:
Each thread has a per-thread cache (called the tcache) containing a small collection of chunks which can be accessed without needing to lock an arena.
那么,arenas和tcache
bins是什么关系呢?如果我可以在不锁定竞技场的情况下访问 tcache
为什么 gef
打印竞技场(地址)?感谢您的澄清!
这似乎是 GDB 插件中的演示问题。 tcache 的实例与线程相关联,而不是与竞技场相关联。一个 tcache 实例可以包含来自多个不同领域的分配,而不仅仅是当前与 tcache 所属线程关联的领域。