Я профилировал программу с помощью gprof для Linux (Ubuntu 11.04) и Windows (7, последняя версия MinGW), одну и ту же программу каждый раз для более или менее одного и того же набора данных и получал значительно разные результаты. (Существенно то, что они могут привести к различным выводам о том, какую часть кода необходимо оптимизировать.)
Вполне возможно, что результаты могут быть законно различны в двух системах, но я также должен учитывать возможность того, что один набор результатов является неточным и его следует игнорировать, и априори более вероятным будет MinGW, так как gprof меньше Тщательно протестировано на Windows, чем на Linux. Более весомый аргумент в пользу такого вывода заключается в том, что результаты в Windows выглядят отчетливо странно:
% cumulative self self total
time seconds seconds calls us/call us/call name
27.43 1.13 1.13 68589813 0.02 0.02 addt
21.48 2.02 0.89 tok
19.17 2.81 0.79 hash
9.95 3.21 0.41 slot
7.89 3.54 0.33 nextx
4.85 3.74 0.20 next
3.52 3.88 0.14 27809047 0.01 0.01 get
0.85 3.92 0.04 eol
0.73 3.95 0.03 __mingw_pformat
0.73 3.98 0.03 ch
0.73 4.01 0.03 tokx
0.49 4.03 0.02 slot
0.49 4.05 0.02 tok
0.24 4.06 0.01 166896 0.06 0.06 mk2
0.24 4.07 0.01 6693 1.49 1.49 initt
0.24 4.08 0.01 __pformat_putchars
0.24 4.09 0.01 hashs
0.24 4.10 0.01 pop
0.24 4.11 0.01 quoted
0.12 4.12 0.01 eat
0.12 4.12 0.01 expand
0.00 4.12 0.00 145841014 0.00 0.00 initparse
Есть много пробелов, и затем сообщается, что initparse
, который является функцией инициализации, вызываемой только один раз и почти ничего не вызывающей, вызывается сто сорок пять миллионов раз.
Должен ли я игнорировать результаты из Windows и просто использовать результаты из Linux? Или есть какая-то проблема с отчетом о количестве вызовов в Windows, которая не влияет на результаты в процентах? Или я неправильно читаю вывод или неправильно использую инструмент?