Вопрос

  1. Согласно сообщениям с 2008 года (я не могу найти это прямо сейчас), Проверка кучи glibc не работает в многопоточной среде. Это все еще ситуация сейчас в 2010 году?
  2. По умолчанию включена проверка кучи? (GCC 4.1.2)? Я не устанавливаю malloc_check_, не знаю о вызове mCheck (), но иногда иногда получаю двойную бесплатную ошибку Glibc с backtrace. Может быть, это включено под какой-то флаг компиляции?
Это было полезно?

Решение

По умолчанию, без использования Malloc_Check_ или MCHECK (), Glibc делает некоторые небольшие проверки, которые не повредит производительностью, таких как вызов дважды Free () на той же куске памяти. Вот почему вы получаете некоторые из этих сообщений, но у вас не будет всех сообщений, предоставленных Malloc Substute API, вы можете получить с помощью Malloc_Check_ (которые делают гораздо больше тестов, но гораздо больше процессора). Вы можете проверить это, вызвав ошибку и тестируя ее с помощью Malloc_Check_. Например, для простого двойного (), я получаю «Double Free Free или Corbion (Top)» или «Бесплатные (): неверные ошибки», в зависимости от того, когда я устанавливаю malloc_check_ или нет.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top