考虑这段代码:
class A {
void methodX() {
// snip (1 liner function)
}
}
class B {
void methodX() {
// same -code
}
}
现在我能走的其他方式是,我有一个类(AppManager),其中大部分成员都是静态的(来自遗留代码,不建议我单身;)
class AppManager {
public:
static void methodX(){
// same-code
}
}
哪一个应该首选? 因为两者都是内联的,所以不应该存在运行时差异,对吧? 哪种形式更清洁?
答案 0 :(得分:6)
现在首先,这是一个非常小的问题,你永远不必担心它,除非每帧调用几千次函数(并且你正在做“框架”很重要的事情)。
其次,如果他们被内联,代码将(希望)优化得如此之多,以至于没有任何迹象表明该函数是非静态的。它会完全相同。
即使没有内联,差异也会很小。 ABI会将“this”指针放入一个寄存器(或堆栈)中,它在静态函数中不会这样做,但同样,净结果几乎无法测量。
底线 - 以最干净的方式编写代码。此时表现并不是一个问题。
答案 1 :(得分:0)
在我看来,内联方式会更快。 因为在编译时代码中替换了内联函数,因此不需要保存寄存器,进行函数调用然后再返回。但是当你调用静态函数时,它只是一个函数调用,它比内联函数有更多的开销。
答案 2 :(得分:0)
我认为这是最常见的优化问题。在编写代码的第一级,你会尝试每一个有助于编译器的技巧,所以如果编译器无法很好地优化代码,那么你已经拥有了。这是错的。在编写代码期间,您在优化的第一阶段寻找的是干净且易于理解的代码,设计和结构。这将通过更好的代码来实现,即手动“优化”。
规则是:
如果您没有资源来对代码进行基准测试,那么重写它并花费大量时间进行优化,而不是需要优化代码。在大多数情况下,如果您很好地构建代码,很难获得任何类型优化的任何速度提升。