gsl::not_null是否影响性能?



c++ Core Guidelines推荐使用gsl::not_null类型。如I.12所述:声明一个不能为空的指针,如not_null:

帮助避免解引用nullptr错误。通过以下方式提高性能避免对nullptr进行冗余检查。

通过在源代码、实现者和工具可以提供更好的诊断,例如通过静态分析找出一些类的错误,并执行优化,例如删除分支和空测试。

(如果有兴趣,这是微软的gsl::not_null实现:GitHub)

指南文档说,它通过"删除分支和null测试"来提高性能。但是,它也增加了一个开销,因为方法operator->()operator*()将被调用,如果我想访问底层指针(这还不包括微软实现的运行时检查在这些方法中的开销)。

既然不能保证方法内联,文档如何得出净性能增益是正的结论?

但是,它也增加了开销,因为方法operator->()和operator*()

除此之外,这些函数是内联定义的并且非常小,因此优化器将(很可能)内联扩展它们,这将完全消除潜在的开销。

文档如何得出净性能增益为正的结论?

正如你所引用的,文档甚至不承认相关的开销,所以这样的结论是微不足道的。

如果你的意思是文件的作者如何得出这样的结论,只有这些作者知道。它的范围可能从"他们测量了它的效果";他们做了一个假设。

相关内容

  • 没有找到相关文章

最新更新