【发布时间】:2017-04-06 12:37:41
【问题描述】:
我有一个函数可以在返回链接列表的下一个节点之前进行基本的错误检查:
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.
}
}
在它之上还有更多的包装函数,它们根据上述函数的返回值做某些事情。
这些包装函数在我的整个代码库中被广泛使用。当我运行分析器时,我发现它们是非常耗时的例程,这太过分了。 这对我来说确实有意义,因为从不同的代码区域对这些函数进行了数千次函数调用,并且由于函数调用开销和/或指令缓存未命中,如此数量的调用肯定会花费时间。
我也知道编译器会围绕这些进行一些优化,以便在生成汇编代码时可以内联它们。由于当前的实施方式,它似乎无法正常工作。
所以,我的问题是:
- 编写此类包装函数以便编译器针对低运行时间优化它们的常用方法是什么?
- 其他公司如何在其代码库中处理这种情况?
注意1:上面的代码只是为了表示,整个代码库中有很多这样的包装函数。因此,如果有人对由于包装函数而改进运行时问题有任何想法,应该分享这个想法。
注意 2:我使用 gcc 作为编译器,我的代码库完全是 C 语言。
【问题讨论】:
-
您是否在启用优化的情况下运行 gcc (
-O3)?
标签: c optimization code-generation