我正在尝试提高执行大量操作的应用程序的性能.
一个操作是:
c |= (1 << i)
Run Code Online (Sandbox Code Playgroud)
我想在一个字节中设置一个位.我在考虑使用查找表来获取OR中的每个值.如果数组访问比原始位操作更快或更慢吗?
或许还有更好的方法吗?
在任何现代计算机体系结构中,移位操作将在单个CPU周期中完成.如果表在CPU缓存中,则表查找可能只需一个周期; 否则它将花费更多,更长的时间(如果内存已被交换到磁盘,可能需要数百万倍).
在较旧的ARM处理器(9系列及更早版本)上,移位需要两个周期(假设i不是常数); 在这种情况下,表查找可能更快 - 一个周期,如果表的基本寄存器已经设置,并且表在缓存中,并且处理器根本就有缓存.
一些非常老的处理器没有快速移位硬件,在这种情况下查找可能会快得多 - 特别是因为CPU速度往往与内存速度相同.
因此,如果你发现自己在20世纪80年代,或者为硬盘驱动器编写固件,那么这可能是有用的; 但要确保你测量它是确定的.
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |