经常遇到这样的面试题:
比较
for (i = 0; i < A; i++)
{
for (j = 0; j < B; j++)
{
/
}
}
和
for (i = 0; i < B; i++)
{
for (j = 0; j < A; j++)
{
/
}
}
两段代码哪一个耗时更少(假设A>>B)?
网上没有这类问题的底层分析,仔细思考之后打算写一篇博客,所用代码在gcc下测试。
首先定义两个数组用于程序测试:
#define A 1000000
#define B 200
int p[A][B],q[A][B];
定义大循环在外面,小循环在里面的测试代码,让数组p实现加一功能:
void demo1()
{
int i,j;
for (i = 0; i < A; i++)
{
for (j = 0; j < B; j++)
{
p[i][j]++;
}
}
}
定义大循环在里面,小循环在外面的测试代码,让数组q实现加一功能:
void demo2()
{
int i,j;
for (j = 0; j < B; j++)
{
for (i = 0; i < A; i++)
{
q[i][j]++;
}
}
}
比较demo1和demo2的耗时,计时程序如下,形参是函数指针:
void shijian(void(*func)())
{