Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Как узнать размер памяти, подлежащей delete


Автор: proc_maker 23.3.2007, 13:00
Привет!

Установил хук на __malloc_hook и __free_hook чтобы узнать сколько памяти выделено и сколько высвобождено. Вопрос, если в __malloc_hook есть размер сколько надо выделить, то в хуке на free его нет. Как узнать размер памяти, на который указывает переданный указатель, подлежащий освобождению.

Спасибо!

Автор: MAKCim 23.3.2007, 14:45
боюсь никак
но есть еще одно извращение  smile 
ведем список выделенных областей
Код

struct mm_area {
    void        *mm_address;
    size_t       mm_size;
};

в __malloc_hook создаем структуру и заполняем ее (после вызова malloc())
во __free_hook сканируем список в поисках нужного `mm_address'
из найденной структуры получаем `mm_size'

PS. для получения памяти под структуру mm_area
в malloc() делаем следующее
Код

malloc(<needed size> + sizeof(struct mm_area));

Автор: proc_maker 23.3.2007, 16:38
Огромное спасибо!
4 месяца бился с проблемой. Программа (огромное спасибо ее авторам) valgrind сегодня показала то что я не видел через mtrace и собирался сделать через хуки. Проблема заключалась в том что выделялась память через new а удалялась через free, и кое-де наоборот.

Странно, но я всегда был уверен что по сути дела это одно и то же. Но именно это и было проблемой почему не отпускалась cached memory в топике, написанном мною вчера.

Еще раз всем СПАСИБО!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)