我有一个函数在返回链接列表的下一个节点之前进行基本错误检查:
Node *next_node(Node *n) {
switch(type(n)){
case A:
case B:
.
.
case N:
return n->next;
default:
exit(1); //This is just a representation of my code handling error scenario.
}
}
它上面有更多的包装器函数,根据上述函数的返回值执行某些操作。
这些包装函数在我的整个代码库中被广泛使用。当我运行探查器时,我发现它们是耗时的例程。 这对我来说很有意义,因为从不同的代码区到这些函数有数千个函数调用,并且由于函数调用过头和/或指令高速缓存未命中,这样的调用数肯定会花费时间。
我也知道编译器会围绕这些进行一些优化,以便在生成汇编代码时可以对它们进行内联。由于目前的实施方式,它似乎无法正常工作。
所以,我的问题是:
注2:我使用gcc作为编译器,我的代码库完全在C中。
答案 0 :(得分:1)
因此,您似乎处于低级优化的正确情况,因为您已经分析了代码并发现了耗时的功能。
假设您已经使用了编译器的更高优化级别,那么不好的部分是对这样的问题没有一般答案。我只能在这里给你一些提示:
但你可以(应该?)也想知道:
#ifdef
。