Интересует такое дело, как поиск в коде мест, которые больше всего едят памяти. Кода много, поэтому нужно что-то интереснее анализа всего кода в ручную, все это под gcc, если что. Смотрел valgrind, но нужного ничего не увидел из опций... Может уже есть какие-то решения для new (перегрузка), *alloc и логировании или куда вообще можете посоветовать копать? Грубо говоря хочется видеть какие классы/структуры/контейнеры в приложении сколько занимают.
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`ем уже там строить всякие графики. это если при помощи молотка и такой-то матери.