メソッド自体の実行時間とメソッドの実行時間を追跡しています。これはROSパッケージに入っているので、私は時間を取るためにROSを使用しています。それは非常に便利です。ドキュメントはhttp://wiki.ros.org/roscpp/Overview/Timeにあります。メソッドからの戻り時間が長くなるC++
void ClassName::my_method()
{
ros::Time t_start = ros::Time::now();
// do stuff
ros::Duration d_execution = ros::Time::now() - t_start;
}
void ClassName::Func()
{
ros::Time t_total = ros::Time::now();
my_method();
ros::Duration d_total = ros::Time::now() - t_total;
}
問題は、d_totalが常にd_executionよりかなり長いことです。
d_executionは通常20-40マイクロ秒ですが、d_totalは約150マイクロ秒です。
なぜこれが起こっているのかわかりません。私の理解は、メソッドの最後に起こっている唯一の事柄は、メソッドでスタック上に作成されたメモリの割り当てを解除することです。しかし、私は変数の数の半分を作成するだけのコードを書き直しました、そして、私はd_totalに何の変化も見ませんでした。関数を返すのに時間がかかるようにするために、他に何が起こることがありますか?どんな助けもありがとうございます。
編集:私はros :: Time :: now()の時間を測定しましたが、それは無視できるようです。
time_t now, then;
time(&now);
ros::Time t = ros::Time::now();
time(&then);
printf("t1-t0: %f", difftime(now, then));
出力は「t1-t0:0.000000」です。
また、メソッドでスタックに割り当てられた変数はすべてdouble型です。唯一の例外は2つのstd :: vectorで、2〜3要素しか含まれていません。
空のメソッド呼び出しにはどのくらいの時間がかかりますか? – tadman
あなたは何回テストをしましたか?アセンブラコードをチェックしましたか? –
バックグラウンドでいくつのタスクを実行していますか?スケジューラが遅延を引き起こす可能性があります。 –