Я с нетерпением жду понимания того, как динамическое управление памятью работает на низком уровне в системах GNU/Linux (так же, как работает ptmalloc).
Конечно, я прочитал код, но у меня много сомнений. Я, более или менее, понимаю структуры данных, но у меня много утечек информации!
Мой вопрос в том, что кто-то знает о каком-либо ресурсе, подробно объясняющем реализацию. Например, я читал такие статьи, как "Понимание кучи, разбив ее" или "Маллок Маллефикарум" и пост-серии. Они отлично справляются, но, конечно, они более сфокусированы в эксплуатации, чем объясняют многие детали реализации.
Если вы не знаете о каком-либо ресурсе, вот некоторые из моих вопросов.
-
Что такое арена? В коде переменной ar_ptr из heap_info есть комментарий, говорящий "арена для этой кучи", поэтому арена не может быть кучей (как сказано везде).
-
Почему в структуре heap_info нет следующего указателя и есть указатель prev? Это из-за main_arena? И что такое main_arena?
-
Каждая структура heap_info может иметь более одной арены (указывая на разные структуры malloc_state)?
-
Когда создаются новостные арены и какой код обрабатывает их? Я прочитал, что новые арены создаются, когда арена, запрашиваемая для хранения данных, заблокирована (потому что процесс или поток процессов работают с ним), и я также прочитал, что каждый поток процесса имеет другую арену. Важно здесь, если вы знаете , какой код обрабатывает эти ситуации.
-
Я также не понимаю, когда люди говорят, что все операции с памятью рождаются из верхнего куска или самого маленького куска. Вы знаете, где я могу найти этот код?
Кстати, я не хочу углубляться в подробности мьютекса.
Я просматриваю реализацию ptmalloc в glibc 2.12.1. Я хотел бы сделать несколько диаграмм об общей структуре всего, поэтому мне нужно понять эти вещи!
Спасибо.