【问题标题】:Actual parameter checking performance impact [closed]实际参数检查性能影响[关闭]
【发布时间】:2017-02-01 06:56:53
【问题描述】:

问题很简单——检查函数的实际参数是否会导致性能损失?

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

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

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

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

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

【问题讨论】:

  • 您需要对这类事情进行广泛的基准测试才能真正了解。没有什么可以明确回答这个问题。另外,请查看 Linux 内核的 __likely__unlikely 宏。
  • 你可能会觉得this很有趣。
  • 一个更好的问题是检查NULL 的参数是否有用。有 很多NULL 指针不能传递给期望有效输入的函数。 assert() 可能更合理。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多