Вот коммит, который добавляет perturb_byte:
http://repo.or.cz/w/glibc.git/commitdiff/854278dff83a754f1d24a17c1c1068e8ebfe6195
А вот ключевой комментарий (и пример включения этой функции):
+ /* Make uses of freed and uninitialized memory known. */
+ mallopt (M_PERTURB, 42);
Итак, это функция отладки для обнаружения неправильного использования памяти free-d или malloce, но еще не инициализированной памяти.
Каждый байт памяти, который malloc получает из системы (через brk
или mmap
), будетбыть заполненным perturb_byte (который не равен нулю).Я думаю, что свободная память также будет заполнена.
Тогда пользователь может проверить, есть ли еще неинициализированные в неправильном диапазоне или есть некоторые записи в свободную память.
Здесьэто документация: http://www.gnu.org/s/hello/manual/libc/Malloc-Tunable-Parameters.html
M_PERTURB
Если ненулевое значение, блоки памяти заполняются значениями, зависящими от некоторых младших битов этого параметра, когда они выделяются (кроме случаев, когда они выделяются calloc)и освобожден.Это можно использовать для отладки использования неинициализированной или освобожденной памяти кучи.
Как я вижу, это можно использовать только для проверки вручную из отладчика.