【发布时间】:2012-07-11 09:48:25
【问题描述】:
我期待了解动态内存管理在 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 实现。我想做一些关于所有东西的整体结构的图表,所以我需要了解这些东西!
谢谢。
【问题讨论】:
-
本书:amazon.co.uk/Understanding-Virtual-Memory-Manager-Perens/dp/… 以 PDF 格式在 Internet 上免费(合法)提供。
-
感谢奥利!这是一个很好的资源,但它专注于内核方面。它很有用,但没有解释有关用户空间分配器的任何内容。顺便说一句,再次感谢!
标签: c malloc heap-memory dynamic-memory-allocation