未执行代码的性能
Performance with non executed code
也许,我的问题很愚蠢,但我没有找到任何答案,我真的很想知道。当我们的程序中有一些函数没有被调用时(例如,它们只为未来的实现做准备),我认为编译器也会读取这些行(最小函数声明)。这没问题,但在更大的项目中表现如何?有什么我们应该避免的(例如一些分配/包含文件)会产生更大的影响吗?
例如:
//never called/used
class abc{
...
}
//never called/used
float function_A(float x, int y){
...}
int main(){
...
}
这只是一个简短的例子,但我想每个人都知道我的意思。非常感谢!
编译器的当前实现不会为某些类型的函数生成代码,正如您可以在这里阅读的那样。未使用的代码通常不会影响性能,尤其是在声明而未定义函数的情况下。只有包含大量指令的函数才会影响性能,但因此我建议您阅读有关指令缓存的内容。
在较大的库中,您应该关心include文件。如果智能地使用和(更重要的是)包含它们,则可以在编译时获得性能。I.e在头文件中使用前向声明,并在cpp文件中包含头。另一件事是,如果您拆分为几个头文件,编译器可以在链接时跳过整个.o文件(编译器在编译过程中创建),如果不使用它们的话。希望这对你有所帮助
如果您的意思是应用程序性能,那么保留未使用的代码不会产生任何影响。编译器执行死代码消除。但是,由于必须处理更多的代码,编译器会稍微放慢速度,因此您将不得不等待更长的时间来编译程序。不包括未使用的头文件是个好主意,因为一个头文件可以引入几十个或数百个其他头文件。(但预编译的头文件也有帮助。)
如果未删除的死代码降低了整个程序的局部性,那么指令缓存可能仍然是一个问题。
想象两个函数A和B,其中B从A被反复调用。如果A和B位于同一个缓存行,从A调用B不太可能产生缓存未命中。但是,如果链接器将第三个函数放在两个函数之间,使A和B不再位于同一缓存行,则调用B时发生缓存未命中的可能性会更大,从而降低总体执行速度。
虽然效果可能无法很好地测量,并且取决于许多其他因素,但减少死代码通常是个好主意。
如果编译器能够检测到它是死代码,它将完全删除它,并可能打印警告。否则,它将增加对象代码的大小。使用静态链接,链接器将删除未使用的函数。
- GCC 和 Clang 代码性能的巨大差异
- 如何使用本征提高性能?(包括示例代码)
- 在.cpp文件中定义方法而不是在 C++ 的 .h 文件中定义方法时,如何提高代码的性能?
- 使用 const double* const 作为模板参数 - 代码性能问题
- 如何在没有性能命中的情况下抽象SIMD代码来处理不同的数据类型
- 为什么 C++ 代码实现的性能不比 python 实现更好?
- 如何提高此 OpenCL 缩减内核代码的性能?
- 相同的代码在不同的 gcc 编译器中存在巨大的性能差异
- 如何基准C 代码的性能
- 相同的代码执行两次:性能差异
- 附加到 C++/CLI dll 的性能探查器无法访问本机C++代码
- 牢记干净的代码的性能,什么更好
- 在将其尺寸较大的向量移动到容量较小的向量之前,是否可以通过使用Reserve()来提高代码性能
- 如何提高四叉树代码的性能以防止程序冻结
- C++多线程性能比单线程代码慢
- 在C++代码中使用纯 C 库是否有性能下降/损失
- 如何使用QueryPerformanceCounter测试现有代码的性能
- 公开类的内部组件,以防止编写过多代码和影响性能
- 从编译器优化和代码性能的角度来看,"if constexpr"与"if"
- C++按字符串调用函数,比较PHP的性能,如何在C++中优化代码