Mat*_*ath 3 c c++ performance include
包含整个库(可能有数百个函数)然后只使用单个函数之间是否有任何运行时性能差异:
#include<foo>
int main(int argc, char *argv[]) {
bar();//from library foo
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在将相关代码片段从库直接粘贴到代码之间,例如:
void bar() {
...
}
int main(int argc, char *argv[]) {
bar();//defined just above
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是什么阻止我在我的C文件开头无意识地包括我最喜欢的(也是最常用的)库?这个流行的线程C/C++:检测多余的#includes?表明编译时间会增加.但编译后的二进制文件会有什么不同吗?第二个项目是否真的胜过第一个项目?
相关:#include <stdio.h>在ac程序中真的做了什么
编辑:这里的问题与相关的不同请问在C/C++中包含未使用的头文件是否有性能损失?这里的问题是包含一个文件.我在这里问,如果包含单个文件与将实际使用的代码片段复制粘贴到源中有任何不同.我稍微调整了标题以反映这种差异.
Lun*_*din 11
就最终计划而言,没有性能差异.链接器仅链接实际用于程序的函数.库中存在的未使用的函数将无法链接.
如果包含许多库,则编译程序可能需要更长的时间.
您不应该包括所有"最喜欢的库"的主要原因是程序设计.您的文件不应包含除正在使用的资源之外的任何内容,以减少文件之间的依赖关系.你的文件对程序其余部分的了解越少越好.它应尽可能自主.
这不是一个简单的问题,所以不值得一个简单的答案.在确定哪些性能更高时,您可能需要考虑许多事项.
静态链接:当您将二进制文件与静态库(使用优化链接器)链接时,链接器将"知道"您将从该特定库中获取哪些功能,并将删除不会在生成的二进制文件中使用的功能.因此,二进制文件将变得更有效,因此性能更高.然而,这需要付出代价.
例如
假设您有一个操作系统,它在整个系统中的大量二进制文件中广泛使用库.如果您要将该库构建为共享库,则所有二进制文件将共享该库,同时可能使用不同的功能.现在假设您将每个二进制文件静态链接到库.您最终会得到大量重复的二进制功能,因为每个二进制文件都需要从该库中获得所需功能的副本.
结论:值得注意的是,在提出问题之前,什么会使我的程序更高效,你应该问自己在你的情况下哪些更高效.您的程序是否占用了大部分CPU时间,可能需要使用静态链接库.如果您的程序只是偶尔运行,可能需要动态链接库来减少磁盘使用量.值得注意的是,使用基于头的库只会给静态链接二进制文件带来非常小的(如果有的话)性能提升,并且会大大增加编译时间.
| 归档时间: |
|
| 查看次数: |
1371 次 |
| 最近记录: |