我想在C中使用范围保护来进行分析.
我想知道我在一个函数中花了多少时间.这是我做的:
int function() {
tic();
... do stuff ...
if (something)
{
toc();
return 0;
}
toc();
return 1;
}
Run Code Online (Sandbox Code Playgroud)
每次退出函数时我都需要放置一个toc语句.我想这样做,而无需到处复制粘贴toc.有没有通用的方法来做到这一点,使用宏或什么?此外,我不想改变调用函数的方式,因为我需要分析许多函数.
谢谢
这不会改变调用函数的方式.但是,如果您希望能够分析每个功能,可能没什么用处.
static inline int real_function() {
// previous contents of function(), with no tic or toc
}
int function() {
tic();
int r = real_function();
toc();
return r;
}
Run Code Online (Sandbox Code Playgroud)
正如其他人所说:使用分析器,从长远来看,它将为您节省大量的精力.因为他们没有说:如果你的平台有一个.
如果没有,那么最简单的可能是(作为编码规则)函数必须只有一个出口点,并且该出口点必须通过你的宏.然后,您可以在进入和退出时使用代码手动检测所有功能.具有多个返回的旧版函数可以如上所述进行包装.
另外,请记住,当您执行此类操作时,您的编译器可能会弄乱您.你可以这样写:
tic();
do_something();
int i = something_else();
toc();
return i;
Run Code Online (Sandbox Code Playgroud)
如果编译器确定something_else没有副作用,那么即使something_else花费大量时间,它也可能将代码转换为:
tic();
do_something();
toc();
return something_else();
Run Code Online (Sandbox Code Playgroud)
您的个人资料数据会低估您在函数中花费的时间.有一个真实的探查器是如此之好的另一个原因 - 它可以与编译器合作.
| 归档时间: |
|
| 查看次数: |
925 次 |
| 最近记录: |