Что такое функция __tcf_0? (Видно при использовании gprof и g ++) - PullRequest
7 голосов
/ 04 августа 2009

Мы используем g ++ 4.2.4, и я пытаюсь отследить некоторые проблемы с производительностью в моем коде.

Я запускаю gprof для создания профиля и получаю следующую «странность» в том, что самой дорогой функцией является __tcf_0:

Each sample counts as 0.01 seconds.
 %   cumulative   self              self     total           
time   seconds   seconds    calls  ms/call  ms/call  name    
40.00      0.04     0.04        1    40.00    95.00  __tcf_0

Затем эта функция вызывает большинство моих пользовательских функций (т.е. она вызывается из main). Ближайшее объяснение, которое я нашел для этого, было здесь , но эта ссылка относится к статическим объектам и атаке, и я не думаю, что это применимо в моем случае.

Если это полезно, я использую Boost (program_options и fusion) и библиотеки HDF5.

UPDATE:

Команда, которую я использую при сборке:

g++  -Wreturn-type -Wunused -Winline -pg  -DLINUX -DHAS_SETENV \
    -DFUSION_MAX_MAP_SIZE=15 -DFUSION_MAX_VECTOR_SIZE=15  -g -O0 \
    --param large-function-growth=300 --param inline-unit-growth=200

Ответы [ 2 ]

5 голосов
/ 04 августа 2009

g ++ генерирует функции с этим именем. Они вызывают деструктор статических объектов и регистрируются с помощью atexit () при вызове конструктора.

4 голосов
/ 04 августа 2009

__ tcf_0 действительно является функцией, которая вызывает деструктор статических объектов и регистрируется для каждого статического объекта, который вызывается при выходе (принимая как должное то, что сказано на этой странице )

Теперь результат вашего gprof довольно странный, поскольку функция, которая занимает большую часть времени, занимает всего 0,04 секунды, что означает, что выполнение всей программы занимает 0,1 с. Если я не ошибаюсь, я думаю, что вы не правильно профиль. Вы скомпилировали свой код с включенным профилированием?

...