2009-12-15 3 views
6

Мне нужно выяснить, какая часть программы linux, которую я запускаю, занимает сколько-нибудь (процентную или абсолютную) память. Мне нужно создать профиль из нескольких таких программ, чтобы я мог идентифицировать некоторых из более крупных потребителей памяти в своем коде и посмотреть, могу ли я оптимизировать их, чтобы использовать меньше. Мне это нужно на платформе MIPS, и, к сожалению, Valgrind не работает на MIPS.Как профилировать использование памяти программы C

Любые помощь/указатели будут очень признательны.

+1

Valgrind теперь поддерживается для MIPS. Проверьте https://bugs.kde.org/show_bug.cgi?id=270777 – MannyNS

ответ

6

Вы можете перенести все свои звонки на free и malloc своими собственными функциями, в которые вы также можете заказывать, в каком файле и по какому номеру строки выполняется каждое выделение. Из этой информации легко увидеть, какая память используется там где.

+2

переопределяет их во время выполнения с LD_PRELOAD ... –

+0

@Stefano, это не сработает, если вы хотите получить дополнительную аргументы для ваших вызовов 'malloc', не так ли? (Я полный Linux n00b) –

+2

Он должен работать. Проверьте здесь: http://www-2.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15213-s03/src/interposition/mymalloc.c –

1

Потребление памяти не должно сильно влиять на базовую архитектуру процессора, поэтому вы можете выполнить профилирование памяти на x86 Linux. Да, абсолютное количество памяти, вероятно, затронуто, но поскольку вы ищете больше относительных, чем абсолютных чисел, это должно сработать.

Тем не менее, это решение вряд ли будет вариантом, если сборка x86 для Linux будет больше, чем перекомпилировать.

+2

... считая, что перенос с MIPS на x86 из этой программы тривиален. –

+0

По общему признанию, это будет муха в мазе. –

+0

Да. Программа, которую я хочу профилировать, если мне нужно перенести эту программу и все связанные с ней библиотеки на x86, это может занять несколько месяцев :-). Так что это не работает для меня – Harty

8

Помимо Valgrind, существует много других отладчиков/профилировщиков памяти. Все последующее, кажется, поддерживает MIPS (но я не пробовал их на этой архитектуре):

jemalloc, CCMALLOC, mpatrol, NJAMD, Dmalloc, и даже Google собственного google-perftools.

Смежные вопросы