见过类似的问题,但它们与缓存未命中或代码重新排序有关。在我的例子中,这些都没有发生。
代码很简单:
#include <stdio.h>
#include <time.h>
void main()
{
unsigned char a, b;
int i;
clock_t before = clock();
for (i = 0; i < 10000000; i++) {
a *= 2;
b *= 2;
}
printf("elapsed: %lu\n", clock() - before);
before = clock();
for (i = 0; i < 10000000; i++) {
a *= 2;
a *= 2;
}
printf("elapsed: %lu\n", clock() - before);
}
Run Code Online (Sandbox Code Playgroud)
所以有两个变量a和b,我用它们做一些事情(做什么并不重要)。第一个循环修改a和b,第二个循环a仅修改 。只能是b也好,无所谓。
第二个循环大约花费两倍的时间。 …