实际参数检查性能影响

时间:2016-09-23 12:04:33

标签: python c performance parameter-passing branch-prediction

问题很简单 - 检查给函数的实际参数是否会导致性能下降?

导出的库函数通常倾向于检查用户代码传递的实际参数:

if (arg1 == NULL || arg2 == NULL)
    return -EINVAL;

此检查是否会导致性能下降?我尝试通过从一些导出的函数中删除这些检查来优化一些库代码(依赖于我是一个表现良好的用户并且总是传递有效参数),但我注意到没有真正的改进。

我的第一个猜测是现代处理器上的分支预测将假设不采用if分支并继续执行没有真正惩罚的代码。如果这确实是原因 - 这种分支预测机制的限制是什么?是否有任何情况可以消除这些检查以提高性能?如何在C等本机编译语言与Python和Java等解释或VM语言之间进行更改?

顺便说一句 - 我意识到检查运行时参数的重要性。我只是对性能方面感兴趣。

1 个答案:

答案 0 :(得分:1)

如果参数检查与值比较一样简单,那么删除此检查所带来的性能提升是最小的。如果任何检查更复杂,例如检查数组的所有项目或调用其他函数来执行每个参数的检查,那么您可能会看到性能方面的一些改进。

在任何编写良好的库中,这种参数检查不应该是耗时的。如果您正在尝试找到影响您的开发的瓶颈,您应该对代码的执行进行基准测试/分析,以确定"代码/功能的哪一行"正在花更多的时间来执行并专注于改进它们。