微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 按值或引用传递标量类型:这有关系吗?

当然,micro-optimization is stupid可能是实践中出现许多错误的原因.尽管如此,我看到很多人做了以下事情:

void function( const double& x ) {}

代替:

void function( double x ) {}

因为它被认为“更有效率”.假设这个功能经常在一个程序中被荒谬地称为数百万次;这种“优化”是否重要?

解决方法

长话短说不,特别是在大多数现代平台上,标量甚至浮点类型都通过寄存器传递.我见过的一般经验法则是128字节作为你应该通过值和通过引用传递之间的分界线.

鉴于数据已经存储在寄存器中,您实际上需要处理器转出缓存/内存来获取数据,从而减慢了速度.这可能是一个巨大的打击,取决于数据所在的缓存行是否无效.

在一天结束时,它实际上取决于平台ABI和调用约定.大多数现代编译器甚至会使用寄存器来传递数据结构,如果它们适合(例如,两个短路的结构等),则在调优时.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐