【发布时间】:2016-12-22 09:46:23
【问题描述】:
一些同事(比我聪明)告诉我,在某些情况下,将实现(定义)移到头文件之外可以减少编译时间 - 在大多数情况下我应该这样做。
经过大量的重构,我相信是真的。
现在我也计划移动非常简单的功能的实现。 (.h -> .cpp)
void f(int index){
return database[index*2]; //<--- contain trivial algorithm like this
}
问题
决定收益多少的因素有哪些?
更具体地说:-
-
用于编译的时间量是否取决于
字符数(不包括评论)我已移至 .cpp 或 ...
复杂度(这里不是指 O(n))函数或算法的...
还有别的吗?
我应该将这些简单函数的定义移至 .cpp 吗?
(只关心性能和编译时间,不关心可维护性和可读性)
编辑:详细示例
考虑一下这段代码。
B.h :-
class B{
public: static void fb(){
//some complex code (e.g. 1000 lines)
}
};
C.h :-
#include "B.h"
class C{
static void fc();
};
C.cpp 包含fc()的实现
D.h :-
#include "B.h"
class D{
static void fd();
};
D.cpp包含fd()的实现
在移动fb 的定义之前,编译器必须为C.cpp 和D.cpp 编译B.h 的大代码。
将fb的定义移动到b.cpp后,我认为C.cpp和D.cpp会更容易编译。
【问题讨论】:
-
真正的编译器性能提升在于不重新编译已经编译的模块
标签: c++