Где malloc () / free () хранит выделенные размеры и адреса?

где malloc() и free () хранят выделенные адреса и их размеры (Linux GCC)? Я читал, что некоторые реализации хранят их где-то перед фактической выделенной памятью, но я не мог подтвердить это в своих тестах.

фоне, может у кого то есть еще один совет для этого: Я немного экспериментирую с анализом памяти кучи процесса, чтобы определить текущее значение строки в другом процессе. Доступ к памяти кучи процесса и прогуливаться по нему не проблема. Однако, поскольку значение строки изменяется и процесс каждый раз выделяет новую часть памяти, адрес строки изменяется. Поскольку строка имеет фиксированный формат, ее все еще легко найти, но после нескольких изменений старые версии строки все еще находятся в памяти кучи (возможно, освобождены, но все еще не используются / перезаписаны), и поэтому я не могу сказать, какая строка является текущей.

Итак, чтобы все еще найти текущий я хочу проверить, используется ли строка, которую я нахожу в памяти, сравнивая ее адрес с адресами, о которых знает malloc/free.

ЧАО, Эльмар!--1-->

2 ответов


есть много способов, которыми malloc/free может хранить размер области памяти. Например, он может храниться непосредственно перед областью, возвращенной malloc. Или он может храниться в таблице поиска в другом месте. Или он может храниться неявно: некоторые области могут быть зарезервированы для определенных размеров распределений.

чтобы узнать, как библиотека C в Linux (glibc) делает это, получите исходный код изhttp://ftp.gnu.org/gnu/glibc/ и посмотрите на . Там есть некоторая документация вверху, и она относится к Памяти-Распределитель Дуг Леа.


Это зависит от реализации стандартной библиотеки, конечно. Таким образом, ваш лучший выбор, вероятно, будет копаться в источнике библиотеки (glibc по умолчанию в Linux) и посмотреть, сможете ли вы это понять. Это, вероятно, не будет тривиальным.