Арена в функции Malloc

Я использую malloc_stats () для печати связанной статистики malloc, в которой я нахожу "Арену 0" для некоторых программ и "Арены 0 и Арены 1" для некоторых других программ.

Что представляют эти арены?

5
задан Vaibhav 19 May 2010 в 07:12
поделиться

4 ответа

См. текст ссылки . Похоже, что куча - это набор арен («подкучей») для обработки распределения памяти между несколькими потоками, что снижает конкуренцию.

2
ответ дан 14 December 2019 в 01:03
поделиться

Код кучи находится внутри компонента glibc и упакован в общую библиотеку libc.so.x. Текущая реализация кучи использует несколько независимых подкучников, называемых аренами. У каждой арены есть свой мьютекс для защиты параллелизма. Таким образом, если в куче процесса достаточно арен и существует механизм для равномерного распределения обращений к куче потоков между ними, то вероятность конкуренции за мьютексы должна быть минимальной. Оказывается, это хорошо работает для распределений. В malloc () выполняется тест, чтобы увидеть, свободен ли мьютекс для текущей целевой арены для текущего потока (trylock). Если это так, то арена заблокирована и перераспределение продолжается. Если мьютекс занят, то каждая оставшаяся арена проверяется по очереди и используется, если мьютекс не занят. В случае, если арена не может быть заблокирована без блокировки, создается новая арена. Эта арена по определению еще не заблокирована, поэтому теперь можно продолжить выделение без блокировки. Наконец, идентификатор арены, в последний раз использованной потоком, сохраняется в локальном хранилище потока и впоследствии используется в качестве первой арены для попытки, когда malloc () вызывается этим потоком в следующий раз. Поэтому все вызовы malloc () будут выполняться без блокировки.

5
ответ дан 14 December 2019 в 01:03
поделиться

Здесь есть все: http://www.gnu.org/software/libc/manual/html_node/Statistics-of-Malloc.html

int arena
Это общий размер памяти выделяется sbrk с помощью malloc, в байтах.

0
ответ дан 14 December 2019 в 01:03
поделиться

В некоторых реализациях malloc «арена» - это пул памяти, из которой делаются отдельные выделения. Алгоритмы определения используемой арены будут различаться в зависимости от реализации, поэтому мы не можем объяснить, почему вы видите разницу. Одним из общих факторов является размер распределения.

2
ответ дан 14 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: