我期待了解动态内存管理在 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 实现。我想做一些关于所有东西的整体结构的图表,所以我需要了解这些东西!
谢谢你。