为了减少工作中一个相当大的框架的编译时间,我考虑将.h文件中的类方法定义移到它们相关的.cpp文件中,如果它们非常大或需要包含可以移动到相关的.cpp文件中进行编译。为了清晰起见,下面是一个人为构造的例子(虽然Foo::inc是一个微小的方法)。
main.cpp:
很久以前,我的一位同事曾提到在某些情况下,这可能会导致运行时性能减慢。我在Google上寻找这种情况,但似乎找不到。这个问题的被接受答案是我能找到的最接近的答案,但它并没有给出具体情况,只是提到可能发生:将内联方法从头文件移到.cpp文件中。
另外,我不感兴趣的是一个方法明确使用了
有哪些情况(如果有)会导致运行时减速?
main.cpp:
#include "Foo.h"
int main(int argc, char** argv) {
Foo foo(argc);
foo.inc();
return foo.m_argc;
}
Foo.h在(尚不需要Foo.cpp)之前:
class Foo {
public:
int m_argc;
Foo (int argc) : m_argc(argc) {}
void inc() { m_argc++; }
};
Foo.h修改后的内容:
class Foo {
public:
int m_argc;
Foo (int argc) : m_argc(argc) {}
void inc();
};
Foo.cpp:
#include "Foo.h"
void Foo::inc() { m_argc++; }
很久以前,我的一位同事曾提到在某些情况下,这可能会导致运行时性能减慢。我在Google上寻找这种情况,但似乎找不到。这个问题的被接受答案是我能找到的最接近的答案,但它并没有给出具体情况,只是提到可能发生:将内联方法从头文件移到.cpp文件中。
另外,我不感兴趣的是一个方法明确使用了
inline
的情况,上面链接中的答案只是我能找到的最接近我所寻找的内容。有哪些情况(如果有)会导致运行时减速?
-flto
。如果没有它,第二种情况将涉及函数调用,因此速度会变慢。然而,-flto
也有一些副作用(可能会增加文件大小)。 - asimes