【问题标题】:Assignment vs Increment operation赋值与增量操作
【发布时间】:2012-06-18 01:04:49
【问题描述】:

我正在开发一个应用程序,我必须保持数据排序,每个数据单元都有一个序列号,我检查序列号是否比前一个大 1,如果是,我增加我收到的按 1 计数。我的问题是,两者之间有区别吗:
1. 将我收到的数量增加一。

2. 将最后接收的序列号分配给接收计数。

谢谢。

【问题讨论】:

  • C#\java\javascript\C\Ruby\Assembly\...?
  • 抱歉,我正在使用 C。
  • 当然性能差异可以忽略不计。
  • 你的措辞有点混乱,但我想我明白了。使用++ 操作符增加值会在金属上“更快”,但如果增加这么少的量,除非您进行大量操作,否则它可以忽略不计。
  • 谢谢。我的应用程序可能会在短时间内获得数百万单位的数据。

标签: c performance variable-assignment increment


【解决方案1】:

对我来说,这听起来像是一个经典的过早优化问题。通常增加值意味着“获取原始->更改->存储”,而分配将是“获取其他->存储新”。 “其他”可能已经被获取,从而节省了更多的时钟周期。因此分配可能会更快。

BUT 以 1 递增通常由编译器和 CPU 进行了很好的优化,因此它不需要任何获取或存储。它可以很好地在一个 CPU 命令中完成,因此消除了任何差异,事实上,增加 1 可能在性能方面更好。

困惑?很好。

重点是,除非您对瓶颈进行基准测试,否则您应该进行这种优化。然后您对选项进行基准测试并选择最佳的。

【讨论】:

  • 如果我们开始谈论多线程环境,这个答案可能会改变。具体来说,直接原子存储可能比加载/添加/存储更好,后者可能不是防弹的。
  • @keeda 要做的另一件事是测试它……编写一个简单的基准测试可能需要不到五分钟。
  • @littleadv,哪个 cpu 在一个命令中会增加并且分配时间更长?
猜你喜欢
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 2011-07-07
  • 2020-04-16
  • 2017-06-20
  • 2017-05-22
  • 2011-07-19
  • 2021-06-29
相关资源
最近更新 更多