取消引用指针vs转移字节?

Poc*_*chi 2 c++ performance

我正在尝试提高执行大量操作的应用程序的性能.

一个操作是:

c |= (1 << i)
Run Code Online (Sandbox Code Playgroud)

我想在一个字节中设置一个位.我在考虑使用查找表来获取OR中的每个值.如果数组访问比原始位操作更快或更慢吗?

或许还有更好的方法吗?

Mik*_*our 6

在任何现代计算机体系结构中,移位操作将在单个CPU周期中完成.如果表在CPU缓存中,则表查找可能只需一个周期; 否则它将花费更多,更长的时间(如果内存已被交换到磁盘,可能需要数百万倍).

在较旧的ARM处理器(9系列及更早版本)上,移位需要两个周期(假设i不是常数); 在这种情况下,表查找可能更快 - 一个周期,如果表的基本寄存器已经设置,并且表在缓存中,并且处理器根本就有缓存.

一些非常老的处理器没有快速移位硬件,在这种情况下查找可能会快得多 - 特别是因为CPU速度往往与内存速度相同.

因此,如果你发现自己在20世纪80年代,或者为硬盘驱动器编写固件,那么这可能是有用的; 但要确保你测量它是确定的.

  • "如果你发现自己在20世纪80年代".Hehheheh (3认同)