gpt4 book ai didi

c++ - 始终分配 vs 检查相等性并分配

转载 作者:行者123 更新时间:2023-11-30 05:42:12 26 4
gpt4 key购买 nike

在以下方面是否存在明显的性能差异:

if (a != b) a = b;a = b;

ab 都是相同的内置类型时,例如 intbool 或者也许一个非常简单和小的 struct

据我所知,第二个表达式每次都会写入内存(我认为这是一个比读取更重的操作),而第一个只有在 ab 不相等。

或者这可能取决于 b 值更改的频率?

我知道这更像是“++i vs i++”之类的问题,不过我很好奇

最佳答案

这真的取决于。

对于 x86 CPU,程序中涉及的操作成本大致如下:

  • 非缓存读取(即从尚未缓存的 RAM 中读取):~100 个时钟
  • 缓存读取:3 到 ~10 个时钟
  • 寄存器读取:1/2 时钟(值非常粗略,因为没有“读取”这样的单一操作)
  • 写:变化和取决于,但通常 ~1 时钟
  • 比较:如果编译器猜测“哪个分支将发生”是错误的(这被称为“流水线停顿”),最多 5-10 个时钟;否则 - 1 个时钟。

使用这些信息,您也许可以做出一些猜测 ;-)。

对于其他(非 x86)桌面/服务器/移动 CPU,数量会有所不同,但总体情况或多或少会相同。

关于c++ - 始终分配 vs 检查相等性并分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30756752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com