Где malloc () / free () хранит выделенные размеры и адреса?
где malloc() и free () хранят выделенные адреса и их размеры (Linux GCC)? Я читал, что некоторые реализации хранят их где-то перед фактической выделенной памятью, но я не мог подтвердить это в своих тестах.
фоне, может у кого то есть еще один совет для этого: Я немного экспериментирую с анализом памяти кучи процесса, чтобы определить текущее значение строки в другом процессе. Доступ к памяти кучи процесса и прогуливаться по нему не проблема. Однако, поскольку значение строки изменяется и процесс каждый раз выделяет новую часть памяти, адрес строки изменяется. Поскольку строка имеет фиксированный формат, ее все еще легко найти, но после нескольких изменений старые версии строки все еще находятся в памяти кучи (возможно, освобождены, но все еще не используются / перезаписаны), и поэтому я не могу сказать, какая строка является текущей.
Итак, чтобы все еще найти текущий я хочу проверить, используется ли строка, которую я нахожу в памяти, сравнивая ее адрес с адресами, о которых знает malloc/free.
ЧАО, Эльмар!--1-->
2 ответов
есть много способов, которыми malloc/free может хранить размер области памяти. Например, он может храниться непосредственно перед областью, возвращенной malloc. Или он может храниться в таблице поиска в другом месте. Или он может храниться неявно: некоторые области могут быть зарезервированы для определенных размеров распределений.
чтобы узнать, как библиотека C в Linux (glibc) делает это, получите исходный код изhttp://ftp.gnu.org/gnu/glibc/ и посмотрите на . Там есть некоторая документация вверху, и она относится к Памяти-Распределитель Дуг Леа.
Это зависит от реализации стандартной библиотеки, конечно. Таким образом, ваш лучший выбор, вероятно, будет копаться в источнике библиотеки (glibc по умолчанию в Linux) и посмотреть, сможете ли вы это понять. Это, вероятно, не будет тривиальным.