16

我期待了解动态内存管理在 GNU/Linux 系统中的低级工作方式(也就是 ptmalloc 的工作方式)。

当然,我已经阅读了代码,但我有很多疑问。我或多或少地了解数据结构,但我有很多信息泄漏!

我的问题是,是否有人知道任何详细解释实施的资源。例如,我读过诸如“通过破坏堆来理解堆”或“Malloc Malleficarum”系列和后期系列之类的论文。他们做得很好,但是,当然,他们更专注于开发而不是解释许多实现细节。

如果您不了解任何资源,这里有一些我的问题。

  • 什么是真正的竞技场?在heap_info结构中的变量ar_ptr的代码中,有一条注释说“这个堆的竞技场”,所以竞技场不能是一个堆(就像到处都说的那样)。

  • 为什么在heap_info结构中没有 next 指针而有prev指针?是因为main_arena吗?什么是main_arena

  • 每个heap_info结构都可以有多个 arena(指向不同的malloc_state结构)?

  • 什么时候创建新闻领域以及处理它的代码是什么?我读过当请求存储数据的竞技场被锁定时会创建新的竞技场(因为进程或进程线程正在使用它),并且我还读到每个进程线程都有不同的竞技场。这里重要的是您是否知道处理这些情况的代码

  • 我也不明白人们什么时候说所有的内存操作都是从顶部块或最狂野的块产生的。你知道我在哪里可以找到这个代码吗?

顺便说一句,我不想​​深入了解互斥锁的细节。

我正在审查 glibc 2.12.1 中的 ptmalloc 实现。我想做一些关于所有东西的整体结构的图表,所以我需要了解这些东西!

谢谢你。

4

2 回答 2

9

好的,我已经进行了一些研究,并且我对其中的许多问题都有了答案。

  • arena 是存储进程的所有动态数据的内存区域。简而言之,arena就是过去称为堆的内存结构。鉴于现在(使用多线程的东西)您希望每个进程拥有多个堆,您可以通过创建称为 arena 的东西来处理它,但这个 arena 只不过是一个堆。heap_info结构只管理一个进程的多个现有领域。

  • 我不知道为什么只有一个prev指针。我所知道的是,通常,所有动态数据都存储在main_arena中,它是为该进程创建的竞技场。不知道在什么情况下不使用main_arena,我知道的是如果一个内存块中的size字段设置了NON_MAIN_ARENA位,那么main_arena就没有被使用,算法从clearing中获取新的arena地址通过heap_for_ptr()宏取出该内存块指针的 20 个较低有效位。综上所述,在正常情况下,main_arena会一直被使用。

  • 是的,正如我所说,每个heap_info结构可以有多个领域。这是因为锁争用。如果您有足够的空闲时间,您可以在 [1] 中阅读相关内容。

  • 我不记得这个了。但事实是,如果竞技场正在使用中,被锁定,就会创建一个新的竞技场。搜索对类似于 new_arena() 或 new_heap() 的函数的任何调用。我记得函数名和那个很像。

  • 我认为这只是意味着一开始堆的所有内存空间都是顶部块(或荒野块),所以当进程需要新的内存请求时,这个顶部块被分割和碎片化。所以这一切都从最上面的块开始。

不想浮夸,我想,三个月后,我的答案是更适合我的问题的答案,所以我把它作为正确的答案。另一方面,感谢所有其他答案。他们真的很有帮助。

顺便说一句,我把所有这些研究都写在了一篇论文中,但鉴于它是西班牙语的,我认为它在这里不会有用,我不知道它是否会被视为垃圾邮件。[2]

[1] http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.16.4439

[2] 这里有论文: http: //overflowedminds.net/papers/newlog/linux_heap_exploiting_revisited.pdf

于 2012-10-06T23:25:33.840 回答
2

堆基本上分为许多小区域,它们独立地满足一个或多个分配的对象。一个这样的区域可能被称为竞技场或区域。主要是堆是满足对象的竞技场集合,要求可以在单个操作中释放一个竞技​​场。为了使这成为可能,一个完整的竞技场被分配为一个连续的内存地址范围。

竞技场或区域之间的区别是灰色的。我不确定 Linux,但一个例子是 Cavium 网络的真实世界多核网络处理器系列,称为 Octeon。它将分配的内存视为竞技场或区域,不同之处在于区域可以分配固定相等大小的对象,而竞技场可以有不同大小的对象。在竞技场的情况下,这自然会导致碎片化。但我无法确认 Linux 是否也是这种情况。

基于区域的内存管理

于 2012-10-05T19:07:58.397 回答