c++ - 如果将非常简单的函数定义移动到 .cpp,编译时间会减少多少?

标签 c++

一些同事(比我聪明)告诉我,在某些情况下将实现(定义)移到 header 之外可以减少编译时间——在大多数情况下我应该这样做。

经过大量重构,我相信这是真的。

现在我也打算移动非常简单的功能的实现。 (.h -> .cpp)

void f(int index){
    return database[index*2];  //<--- contain trivial algorithm like this
}

问题

决定 yield 多少的因素有哪些?

更具体地说:-

  1. 节省的编译时间是否取决于

    • 字符数(不包括评论)我移动到 .cpp 或 ...

    • 复杂度(这里不是指O(n))函数或...的算法

    • 还有什么?

  2. 我应该将这种简单函数的定义移动到 .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.cppD 编译大量的 B.h 代码。 cpp.

fb 的定义移动到 b.cpp 后,我认为 C.cppD.cpp将更容易编译。

最佳答案

What are the factors to determine how much the benefit?

减少编译时间的主要因素取决于有多少其他翻译单元包含带有内联代码的 header 。您提到的其他因素只是无关紧要。

如果您更改定义中的某些内容,则与仅在单个 .cpp 文件中更改定义相比,需要重新编译更多文件。

  1. Should I move definition of such simple functions to .cpp? (concern only performance and compile time, not concern maintainability or readability)

不是,我上面说的是非平凡的东西。如果你有这么简单的函数定义,而且以后不太可能改变,你可以把它留在头文件中。

关于c++ - 如果将非常简单的函数定义移动到 .cpp,编译时间会减少多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41280135/

相关文章:

c++ - 在 Arduino 中初始化 C++ 库

c++ - STL std::sort() 使用 Introsort,但它是如何工作的?

c++ - 如何查询一个类型是否为models Struct?

c++ - 自定义 glBlendFunc 比原生慢很多

c++ - 如何使用 make 运行增量 PC-Lint

c++ - windows下如何使用cpp通过odbc获取mysql中时间戳类型的字段

c++ - 解析 C++ 文件以进行编辑

c++ - 隐式转换应该在模板参数的上下文中工作吗?

c++ - C++迷宫的DFS最短路径

java - 为什么有前缀/后缀++而没有前缀/后缀+=?