1
问题很简单 - 检查给函数的实际参数是否会导致性能损失?实际参数检查性能影响
导出的库函数通常倾向于以检查用户代码传递的实际参数:
if (arg1 == NULL || arg2 == NULL)
return -EINVAL;
这是否检查性能产生负面影响?我尝试通过从某些导出的函数中删除这些检查来优化某些库代码(依赖于我是一个行为良好的用户并始终传递有效参数),但我注意到没有真正的改进。
我的第一个猜测是现代处理器上的分支预测会假设if分支没有被采用,并且继续执行代码而没有真正的惩罚。如果这确实是原因 - 这种分支预测机制的局限性是什么?是否有消除这些检查会提高性能的情况?在C这样的本地编译语言和解释或VM语言(如Python和Java)之间如何变化?
顺便说一句 - 我意识到检查运行时参数的重要性。我只对性能方面感兴趣。
您需要广泛地标定这种事情才能真正知道。没有明确的答案。另外,查看Linux内核的'__likely'和'__unlikely'宏。 –
您可能会发现[this](http://stackoverflow.com/a/11227902/2681632)有趣。 –
一个更好的问题是检查'NULL'的参数是否有用。有*丰富*非'NULL'指针,不能传递给期望有效输入的函数。一个'assert()'可能更合理。 – EOF