【发布时间】:2016-05-27 19:16:15
【问题描述】:
我正在跟踪方法本身和方法外部的执行时间。我正在使用 ROS 来获取时间,因为这一切都在 ROS 包中,而且非常方便。文档可以在这里找到:http://wiki.ros.org/roscpp/Overview/Time。
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”。
此外,方法中分配在堆栈上的所有变量都是双精度数。唯一的例外是两个仅包含 2-3 个元素的 std::vector。
【问题讨论】:
-
一个空的方法调用需要多长时间?
-
你做了多少次测试?你检查汇编代码了吗?
-
你在后台运行了多少任务?调度程序可能会导致延迟。
-
注意:析构函数也在“函数返回之前”执行
-
你给
ros::Time::now()计时了吗?
标签: c++ performance time ros