Closed. This question needs to be more focused. It is not currently accepting answers. Learn more。
想改进这个问题吗?更新问题,使其只关注一个问题editing this post。
三年前关闭。
问题很简单-检查给定给函数的实际参数是否会导致性能损失?
导出的库函数通常倾向于检查用户代码传递的实际参数:
这张支票会被罚款吗?我试图通过从一些导出函数中删除这些检查来优化一些库代码(依赖于我是一个行为良好的用户并且总是传递有效的参数),但我没有注意到真正的改进。
我的第一个猜测是,在现代处理器上的分支预测将假设if分支没有被执行,并且继续执行代码,而不会受到实际的惩罚。如果这确实是原因,那么这种分支预测机制的局限性是什么?是否存在消除这些检查可以提高性能的情况?在本地编译语言(如C)和解释语言(如Python和Java)或VM语言(如Python和Java)之间,这种情况如何变化?
顺便说一句,我意识到检查运行时参数的重要性。我只是对表演感兴趣。
想改进这个问题吗?更新问题,使其只关注一个问题editing this post。
三年前关闭。
问题很简单-检查给定给函数的实际参数是否会导致性能损失?
导出的库函数通常倾向于检查用户代码传递的实际参数:
if (arg1 == NULL || arg2 == NULL)
return -EINVAL;
这张支票会被罚款吗?我试图通过从一些导出函数中删除这些检查来优化一些库代码(依赖于我是一个行为良好的用户并且总是传递有效的参数),但我没有注意到真正的改进。
我的第一个猜测是,在现代处理器上的分支预测将假设if分支没有被执行,并且继续执行代码,而不会受到实际的惩罚。如果这确实是原因,那么这种分支预测机制的局限性是什么?是否存在消除这些检查可以提高性能的情况?在本地编译语言(如C)和解释语言(如Python和Java)或VM语言(如Python和Java)之间,这种情况如何变化?
顺便说一句,我意识到检查运行时参数的重要性。我只是对表演感兴趣。
最佳答案
如果参数的检查像值比较一样简单,那么删除此检查所带来的性能改进将是最小的。如果任何检查都更复杂,比如检查数组的所有项或调用其他函数来执行对每个参数的检查,那么您可能会看到性能上的一些改进。
在任何编写良好的库中,此类参数检查都不应耗费时间。如果您试图找到影响开发的瓶颈,那么您应该对代码的执行进行基准测试/分析,以确定“哪一行代码/函数”需要更多的时间来执行并集中精力改进它们。
关于python - 实际参数检查对性能的影响,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39660354/