c++ - 这种错误检查方法在性能上会不会太昂贵了?

标签 c++ optimization error-handling

在我的项目中,错误处理和日志记录是通过名为 Error 的类执行的。任何可能需要记录错误或警告的函数或对象方法,都会有一个 Error & error 作为它的最后一个函数参数,并且会调用 Error::report(...) 如果遇到问题。

一个例子是:

float ratioBetweenBounds(  float between, 
                           float lowerBound, 
                           float upperBound, 
                           Error & error)    // <-- 
{
    if(upperBound != lowerBound){
        return (between - lowerBound) / (upperBound - lowerBound);
    }else{
        error.report(Error::DivideByZero, __LINE__, __FILE__, lowerBound); // <--
        return NAN;
    }
}

我的问题是,传递这样一个庞大的引用是否会导致每帧调用大约 5,000 次的小函数出现性能问题?我会(并且会!)自己对它进行概要分析,但是要过几天我才能(在路上)编译任何东西。也许很明显它会或不会影响 SO 的性能,并且分析也不是太必要。

到目前为止,这在可读性和调试方面对我来说效果很好,所以如果性能损失微不足道,那么我会很高兴。

(我能看到的唯一开销是添加的分支,但分支预测器应该处理这个问题。它也可能会把一个已经很大的函数翻过来,这样它就不会被内联。尽管在这些事情之外,我真的不知道。至少,它看起来可以与 try/catch block 创建的任何小性能相媲美,除了抛出的分支会静态偏见,我假设)

最佳答案

引用通常由编译器实现为隐藏指针,因此您实际上是在函数调用中添加了一个指针参数。每帧 5000 次调用对于现代处理器来说确实不算多。继续分析,但我不会担心它,除非它被证明是一个问题。

关于c++ - 这种错误检查方法在性能上会不会太昂贵了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20986558/

相关文章:

vb.net - 错误调试 - 从 String 到 Double 的转换

powershell - 为什么 `exit`抑制Select-Xml的错误?

c++ - 反向 C 风格的字符串? - C++

c++ - 有没有办法让编译器优化对外部函数的多次调用?

c++ - QByteArray 获取第n个元素的地址

c - 死代码移除器 adbout gcc -O 和更高版本

ruby-on-rails - 如何使用 Ruby on Rails 优化 'string.split("&").sort.join("&")'?

typescript - 如何在 Protractor ( typescript )中制作更具描述性的错误日志消息

c++ - 匹配 Eigen 和 Ceres-Solver 版本的最简单方法是什么?

c++ - 在 C++ 中传递对象了解基础知识