对于非常简单的迭代器或一系列内存上的迭代循环,可以使用以下两种方法(简单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 / ARM64上哪两个版本更快?是否有比较指针和分支 - 如果没有指令?
答案 0 :(得分:1)
分析您的应用程序,看看不同的循环是否有所不同。
在现代CPU中,瓶颈是内存访问延迟,而不是指令吞吐量。通常会产生真正不同的是优化内存访问以避免CPU缓存未命中。