Я новый пользователь Valgrind, и до сих пор я знаю, что могу анализировать выходной файл, как в приведенном ниже примере: «Для одного вызова функции свопирования требуется 15 инструкций : 3 для пролога, 3 для назначения tmp, 4 для копирования с * b на * a, 3 для назначения из tmp и еще 2 для эпилога ».Печать инструкции Мнемоника на строку кода в выводе Valgrind
. void swap(int *a, int *b)
3,000 {
3,000 int tmp = *a;
4,000 *a = *b;
3,000 *b = tmp;
2,000 }
Эта информация является большим, но это возможно, чтобы получить точные инструкции (Мнемоника), что, где используется/исполненные за каждую линию, как в приведенном ниже примере? Эта информация была бы очень ценной для меня.
. void swap(int *a, int *b)
3,000 { [insta, instb, instc]
3,000 int tmp = *a; [insta, instb, instc]
4,000 *a = *b; [instd, instd, insta, instc]
3,000 *b = tmp; [instc, insta, instb]
2,000 } [instc, insta]
Пример источника (http://web.stanford.edu/class/cs107/guide_callgrind.html)
С наилучшими пожеланиями, Raul.
kcachegrind (qcachegrind) GUI viewer имеет разборный вид для вывода инструментов callgrind и cachegrind valgrind (профилировщики на основе valgrind). Как я знаю, kcachegrind использует внешний вызов для objdump и анализирует его, чтобы получить смешанное представление. Инструмент 'callgrind_annotate' не имеет возможности выбрать листинг сборки. (PS: вы должны помнить, что valgrind является симулятором, и он имитирует разный процессорный конвейер. Intel - это процессор Out-of-order и может выполнять до 4 инструкций за такт, каждая инструкция переводится на половину, одну или несколько микроопераций) – osgx