2009-08-04 16 views
6

g ++ 4.2.4を使用しています。私のコードでいくつかのパフォーマンスの問題を追跡しようとしています。関数__tcf_0とは何ですか? (gprofとg ++を使用したときに表示される)

私はプロファイルを生成するためには、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 

は私のユーザーのほとんどの通話に表示されます(つまり、メインから呼び出されたものです)。私がこれで見つけた最も近い説明はhereでしたが、そのリンクは静的オブジェクトとatexitを参照していますが、私の場合はこれが当てはまりません。

私は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 

答えて

3

__tcf_0はに、静的オブジェクトのデストラクタを呼び出し、各静的オブジェクトに登録された関数であることが確からしいです終了時に呼び出されます(this pageで言われているものを当然受け取ります)

gprofの結果は、ほとんどの時間がかかる0.04秒であり、これはプログラム全体が0.1秒かかることを意味する。私が間違っていないならば、あなたは正しくプロファイルされていないと思います。プロファイリングを有効にしてコードをコンパイルしましたか?

+0

質問に使用するビルドコマンドを追加しました。私たちはきわめて柔軟なビルドシステムを持っています。これは過去に成功した特別な "gprof" make設定を使用しています。だから原則として私は*私は必要なすべての設定を持っていると思う*。 –

+0

どちらの回答も正しいですが、担当者がおそらくもっと役に立ちます。 –

5

g ++はこの名前の関数を生成します。それらは静的オブジェクトのデストラクタを呼び出し、コンストラクタの呼び出し時にatexit()で登録されます。

関連する問題