最佳答案
这是相关程序的提取。矩阵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 8192float img[SIZE][SIZE]; // input imagefloat res[SIZE][SIZE]; //result of mean filterint 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 secsSIZE = 8192: 7.20 secsSIZE = 8193: 3.18 secs
编译器是GCC。据我所知,这是因为内存管理,但我真的不知道太多关于这个主题,这就是为什么我在这里问。
如何解决这个问题也很好,但如果有人能解释这些执行时间,我已经很高兴了。
我已经知道malloc/free,但问题不在于使用的内存量,而仅仅是执行时间,所以我不知道这会有什么帮助。