2012-07-03 4 views
0

Я использую Doug Lea's dlmalloc memory allocator. Однако, когда я использую это, я получаю сегментацию. Если я использую обычный malloc, моя программа работает нормально. Я помню, что однажды прочитал, что вам нужно сначала вызвать некоторую функцию инициализации для работы dlmalloc, но теперь я не могу вспомнить, какую функцию. Я попытался взглянуть на комментарии, чтобы выяснить, какую функцию, но все равно не могу найти.Сбой связи с использованием dlmalloc

+0

Пожалуйста, покажите свой код. –

+0

Его бензиновый бенчмарк от PARSEC. – pythonic

+0

Является ли ваша программа многопоточной? – dasblinkenlight

ответ

3

Из комментариев в исходном коде распределителя:

Протектор-безопасность: НЕ поточно- если USE_LOCKS определен ненулевая

Когда USE_LOCKS определен, каждый публичный призыв к таНосу, свободный и т. д. окружен замком. По умолчанию для этого используется простой мьютекс pthread, критический раздел win32 или блокировка отпирания, если он доступен для платформы и не отключен установкой USE_SPIN_LOCKS = 0.

Вам необходимо скомпилировать библиотеку с USE_LOCKS, иначе вы можете увидеть сбои.

Другая возможность заключается в том, что ваша программа демонстрирует неопределенное поведение, которое не приводит к последствиям с обычным malloc. Например, он может писать один байт за выделенную область где-то, но этот байт может быть частью блока памяти, который на несколько байт больше, чем вы запросили. Используйте valgrind, чтобы проверить вашу программу на наличие ошибок памяти с помощью «обычного» malloc, прежде чем связывать его с пользовательским распределителем.

Смежные вопросы