对于非常简单的迭代器或内存范围内的迭代循环,可以使用以下两种方法(简单C中的代码类似于底层机器指令):
柜台:
int a[10]; int *p=a; cnt = 10;
do{
foo(*p++); /* loop action */
cnt--;
} while( cnt > 0);指针:
int a[10]; int *p=a; int *stop=a+10;
do{
foo(*p++); /* loop action */
} while( p < stop);虽然后一种版本似乎少了一条指令,但在我的旧内存中的大多数机器上,都有一个“减少寄存器和跳转(如果不是零)”指令,它的速度(甚至比指针比64位指针和32位数据对象更快)更快。这两个版本中哪一个在AMD64和ARM/ARM 64上会更快?是否有比较指针和分支-如果没有指令?
发布于 2015-12-10 13:16:48
分析您的应用程序,看看不同的循环是否会产生不同的效果。
在现代CPU中,瓶颈是内存访问延迟,而不是指令吞吐量。真正不同的是优化内存访问以避免CPU缓存丢失。
https://stackoverflow.com/questions/34200000
复制相似问题