python - 实参校验性能影响

标签 python c performance parameter-passing branch-prediction

<分区>

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

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

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

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

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

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

最佳答案

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

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

关于python - 实参校验性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39660354/

相关文章:

python - 对文件使用 asyncio 真的是个好主意吗

c - 哪里可以找到 glibc 中数学函数 ceil() 的源代码?

c# - 在 Windows 中对程序进行基准测试的最佳方法是什么?

Java 数学运算符的相对性能

python - twil python linux错误

javascript - cefpython 截取当前 html 的屏幕截图(可选 : specific elements)

python - python 范围是否有 'anti-step' ? range(0, 100, n) 给出每个第 n 个数字,如果我想排除每个第 n 个数字怎么办?

c - 递归反转单链表的函数中的段错误

c - C语言中如何输出连续的字母

java - 寻找递归解的迭代解