这是有问题的程序的摘录。矩阵img[][]
的大小为SIZE×SIZE,并初始化为:
img[j][i] = 2 * j + i
然后,创建一个矩阵res[][]
,并将此处的每个字段作为img矩阵中周围9个字段的平均值。为简单起见,边框保留为0。
for(i=1;i<SIZE-1;i++)
for(j=1;j<SIZE-1;j++) {
res[j][i]=0;
for(k=-1;k<2;k++)
for(l=-1;l<2;l++)
res[j][i] += img[j+l][i+k];
res[j][i] /= 9;
}
这就是程序的全部内容。为了完整起见,这是之前的内容。之后没有代码。如您所见,这只是初始化。
#define SIZE 8192
float img[SIZE][SIZE]; // input image
float res[SIZE][SIZE]; //result of mean filter
int i,j,k,l;
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
img[j][i] = (2*j+i)%8196;
基本上,当SIZE为2048的倍数时,该程序运行缓慢,例如执行时间:
SIZE = 8191: 3.44 secs
SIZE = 8192: 7.20 secs
SIZE = 8193: 3.18 secs
编译器是GCC。据我所知,这是由于内存管理引起的,但是我对这个主题并不了解太多,这就是为什么我在这里问。
同样如何解决这个问题也很好,但是如果有人可以解释这些执行时间,我已经很高兴了。
我已经知道malloc / free了,但是问题不在于所使用的内存量,而仅仅是执行时间,所以我不知道这会如何帮助。