我希望了解在GNU/Linux系统中低级别下动态内存管理是如何工作的(也就是说,ptmalloc的工作原理)。
当然,我已经阅读了代码,但还有很多疑问。我或多或少地了解数据结构,但仍有许多信息泄漏!
我的问题是,是否有人了解任何详细解释实现的资源。例如,我已经阅读了诸如“通过打破它来理解堆”或“Malloc Malleficarum”系列和后续文章等论文。它们做得很好,但当然它们更侧重于利用而不是解释许多实现细节。
如果您不知道任何资源,请参考以下一些问题。
什么是“arena”?在“heap_info”结构体的“ar_ptr”变量的代码中,有一个注释说“arena for this heap”,所以“arena”不能是堆(因为它被说得到处都是)。
为什么在“heap_info”结构中没有next指针而有一个“prev”指针?是因为“main_arena”吗?“main_arena”是什么?
每个“heap_info”结构可以有多个arena(指向不同的“malloc_state”结构)吗?
何时创建新的arena,以及处理它的代码是什么?我已经读到,当请求用于存储数据的arena被锁定(因为进程或进程线程正在使用它)时,将创建新的arena,我也读到每个进程线程有一个不同的arena。重要的是你是否知道“处理这些情况的代码”。
我也不明白人们何时说所有内存操作都来自顶部块或最广泛的块。您知道我可以在哪里找到这个代码吗?
顺便说一下,我不想深入了解互斥细节。
我正在审查glibc 2.12.1中的ptmalloc实现。 我想制作一些关于所有内容的总体结构的图表,因此我需要了解这些内容!
谢谢。