Отследить где в коде выделяется больше всего памяти
От: mezon  
Дата: 17.02.07 17:46
Оценка:
Интересует такое дело, как поиск в коде мест, которые больше всего едят памяти. Кода много, поэтому нужно что-то интереснее анализа всего кода в ручную, все это под gcc, если что. Смотрел valgrind, но нужного ничего не увидел из опций... Может уже есть какие-то решения для new (перегрузка), *alloc и логировании или куда вообще можете посоветовать копать? Грубо говоря хочется видеть какие классы/структуры/контейнеры в приложении сколько занимают.
Re: Отследить где в коде выделяется больше всего памяти
От: qvasic Украина  
Дата: 18.02.07 16:13
Оценка:
M>Интересует такое дело, как поиск в коде мест, которые больше всего едят памяти. Кода много, поэтому нужно что-то интереснее анализа всего кода в ручную, все это под gcc, если что. Смотрел valgrind, но нужного ничего не увидел из опций... Может уже есть какие-то решения для new (перегрузка), *alloc и логировании или куда вообще можете посоветовать копать? Грубо говоря хочется видеть какие классы/структуры/контейнеры в приложении сколько занимают.

можно попробовать так:

void *my_debug_malloc(size_t size, const char *file, int line, const char *funct)
{
    printf("file: %s; line: %i; function: %s; requested memory: %ibytes\n", file, line, funct, size);    
    return malloc(size);
}
void *operator new(size_t size, const char *file, int line, const char *funct)
{
    printf("file: %s; line: %i; function: %s; requested memory: %ibytes\n", file, line, funct, size);    
    return malloc(size); //ну и еще всякие проверки
}

#define malloc(x) my_debug_malloc(x, __FILE__, __LINE__, __FUNCSIG__)
#define new new(__FILE__, __LINE__, __FUNCSIG__)

но это не будет работать в случае использования ниже этих редефайнов других перегрузок new или в наличии других редефайнов этих операторов/функций.
вместо stdout можно писать в файл разделяя элементы (файл, строка, функция) табуляцией, потом грузить этот файл каким-нибудь excel`ем уже там строить всякие графики. это если при помощи молотка и такой-то матери.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.