为什么将tcache bin与竞技场相关联?

问题描述 投票:1回答:1

我正在将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进行了一些研究,发现了我已经知道的内容:

[每个线程都有一个每个线程的缓存(称为tcache),其中包含一小部分块,可以在不需要锁定舞台的情况下对其进行访问。

所以,竞技场和tcache箱之间是什么关系?如果我可以在不锁定竞技场的情况下访问tcache,为什么gef打印一个竞技场(地址)?感谢您的澄清!

multithreading heap-memory glibc
1个回答
0
投票

这似乎是GDB插件中的演示文稿问题。 tcache的实例与线程而不是竞技场关联。一个tcache实例可以包含来自多个不同领域的分配,而不仅仅是当前与tcache所属线程关联的领域。

© www.soinside.com 2019 - 2024. All rights reserved.