Что такое G ++ 4.4.1 по умолчанию? - PullRequest
6 голосов
/ 03 мая 2010

Мне было интересно, какой распределитель памяти по умолчанию в G ++ 4.4.1, в Ubuntu 9.1. Я заинтересован в сравнении различных C ++ распределителей в многопоточной среде. И где я могу получить больше информации о распределителе памяти по умолчанию?

РЕДАКТИРОВАТЬ : Я имею в виду новые и удалить операторы. Единственная ссылка на rt и pthread

Привет

Ответы [ 3 ]

2 голосов
/ 03 мая 2010

Вы можете использовать переменную LD_PRELOAD, чтобы использовать свой собственный распределитель.
LD_PRELOAD = "/ path / your_lib_exporting_malloc.so"

Запуск любого приложения, динамически связанного с glibc в том же терминале, фактически использует предоставленную вами реализацию malloc.
Многие реализации malloc доступны бесплатно.
* TLSF
* jemalloc
* dlmalloc (malloc Дуга Ли, был вокруг навсегда)
* ptmalloc2 (malloc Дуга Ли, расширенный для поддержки арен для каждого потока.)
* TCMalloc (malloc от Google, утверждает, что он в 6 раз быстрее, чем ptmalloc2)
* nedmalloc (утверждает, что он быстрее, чем tcmalloc)
* Hoard, также утверждает, что очень быстро
(источник: Блог Джоша Хабермана )

1 голос
/ 03 мая 2010

Оператор g ++ new действительно реализован с использованием glibc malloc .
Затем само выделение памяти выполняется с использованием стандартного системного вызова unix mmap .

Вы можете получить больше информации о вашем распределителе памяти, используя mallinfo .
См. Статистика-о-Malloc и Эффективность-и-Malloc для получения дополнительной информации.

1 голос
/ 03 мая 2010

G ++ создаст ссылки на оператор new () в libstdc ++, который поставляется с G ++. Это, в свою очередь, использует malloc (), определенный в libc, который установлен в вашей системе (обычно glibc).

Большинство замещающих распределителей указывают одному из них на их реализацию, обычно они просто заменяют malloc (). Например, вы можете использовать Google TC Malloc, просто предварительно загрузив их общую библиотеку. Изменения в скомпилированном приложении не требуются.

...