[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Сложная куча malloc

По умолчанию подсистема malloc использует одну кучу (пул свободной памяти). Однако в системе предусмотрены средства организации нескольких куч (или сложной кучи) на случай, если это понадобится.

Организация нескольких куч в подсистеме malloc может увеличить производительность многонитевых приложений в многопроцессорных системах. Если в подсистеме malloc только одна куча, то запросы на выделение памяти, поступающие от нитей с разных процессоров, ставятся в очередь, что означает, что в каждый момент времени может обслуживаться только один запрос. Это может оказать существенное влияние на производительность многопроцессорной системы.

В режиме сложной кучи подсистема malloc создает фиксированное количество куч. Как только процесс будет создавать вторую нить, подсистема malloc начнет использовать для него несколько куч. Каждый запрос на выделение памяти будет обслуживаться в одной из куч. За счет этого подсистема malloc может распараллеливать запросы, поступающие от нескольких нитей, по крайней мере до тех пор, пока количество нитей не больше, чем число куч.

Если количество нитей, одновременно обращающихся к malloc, превысит количество куч, то лишние запросы будут поставлены в очередь. Такой подход в целом должен существенно повысить производительность подсистемы malloc при работе с многонитевыми процессами в многопроцессорной среде.

Переход в режим нескольких куч осуществляется в момент запуска процесса с помощью переменной среды MALLOCMULTIHEAP. Максимальное число куч равно 32.

Включение отладчика malloc

По умолчанию подсистема malloc работает с одной кучей. Для работы с несколькими кучами нужно задать переменную среды MALLOCMULTIHEAP.

Для создания нескольких куч с параметрами по умолчанию нужно присвоить переменной MALLOCMULTIHEAP любое непустое значение, например:

  MALLOCMULTIHEAP=true

В этом случае подсистема malloc перейдет в режим нескольких куч со стандартными параметрами (32 кучи и быстрый алгоритм выбора кучи).

Для создания нескольких куч с нестандартными параметрами нужно задать переменную MALLOCMULTIHEAP следующим образом:

  MALLOCMULTIHEAP=<опции>

где <опции> - список опций конфигурации, указанных через запятую.

Опции MALLOCMULTIHEAP

Предусмотрены следующие опции MALLOCMULTIHEAP:

Эти опции подробно описаны ниже.

Переменная MALLOCMULTIHEAP должна быть указана в следующем формате:

  MALLOCMULTIHEAP=[heaps:n] | [considersize]

Можно указать любую из опций, либо обе опции через запятую:

  MALLOCMULTIHEAP=heaps:3,considersize

В данном примере будут созданы три кучи и медленный алгоритм выбора кучи, минимизирующий размер процесса.

Каждая опция конфигурации может быть указана в переменной MALLOCMULTIHEAP не более раза. Если какая-либо опция указана несколько раз, то будет применяться последнее из указанных значений.

Ниже подробно описаны все опции MALLOCMULTIHEAP:

heaps:n
По умолчанию максимальное число куч равно 32. С помощью опции heaps:n можно изменить этот максимум на любое число от 1 до 32. Количество куч задает параметр n. Если n будет находиться вне допустимого диапазона, будет применяться значение по умолчанию (32).

considersize
По умолчанию при работе с несколькими кучами подсистема malloc направляет каждый запрос в следующую свободную кучу. Если будет указана опция considersize, подсистема malloc будет применять другой алгоритм выбора кучи, который будет направлять запросы только в такие кучи, в которых достаточно места для выполнения запроса. Это может сократить количество вызовов sbrk(). С другой стороны, в режиме considersize алгоритм выбора кучи выполняет дополнительные действия, и поэтому он работает медленнее, чем стандартный алгоритм.

Связанная информация

Выделение памяти в системе с помощью подсистемы malloc

Раздел malloc, free, realloc, calloc, mallopt, mallinfo, alloca, or valloc Subroutine в книге AIX 5L Version 5.1 Technical Reference: Base Operating System and Extensions Volume 1.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]