Проверка Непротиворечивости "кучи" glibc

  1. Согласно сообщениям с 2008 (я не могу найти его прямо сейчас), glibc проверка "кучи" не работает в многопоточной среде. Это - все еще ситуация теперь в 2010?
  2. "Куча" проверяет, включил по умолчанию? (gcc 4.1.2)? Я не устанавливаю MALLOC_CHECK _, делаю не знающий о вызове mcheck (), но все еще иногда получаю двойную бесплатную glibc ошибку со следом. Возможно, это включено некоторым флагом компиляции?
8
задан dimba 14 May 2010 в 07:11
поделиться

1 ответ

По умолчанию, без использования malloc_check_ или mcheck(), glibc делает несколько небольших проверок, которые не вредят производительности, например, дважды вызывает free() на одном и том же участке памяти. Вот почему вы получаете некоторые из этих сообщений, но у вас не будет всех сообщений, предоставляемых malloc substitute api, которые вы можете получить, используя MALLOC_CHECK_ (которые делают намного больше проверок, но и намного более требовательны к вычислительной мощности). Вы можете проверить это, вызвав ошибку и протестировав ее с malloc_check_ и без него. Например, для простой double-free() я получаю ошибки "double free or corruption (top)" или "free(): invalid pointer" в зависимости от того, установил я MALLOC_CHECK_ или нет.

Чтобы ответить на вопрос 1/, mcheck полагается на хуки malloc с тех пор, как они существуют (около 15 лет), а они не предназначены для потокобезопасности.

Источники: glibc/malloc/malloc.c, http://sourceware.org/bugzilla/show_bug.cgi?id=9939

3
ответ дан 6 December 2019 в 00:54
поделиться
Другие вопросы по тегам:

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