姬長信(Redy)

c – 为什么在循环8192个元素时我的程序会…


以下是相关程序的摘录.矩阵img [] []的大小为SIZE×SIZE,并初始化为:

img [j] [i] = 2 * j i

然后,你创建一个矩阵res [] [],这里的每个字段都是img矩阵中它周围的9个字段的平均值.为简单起见,边框保留为0.

for(i=1;i

这就是该计划的全部内容.为了完整起见,以下是之前的内容.没有代码.如您所见,它只是初始化.

#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是2048的倍数时,该程序很慢,例如,执行时间:

SIZE = 8191: 3.44 secs
SIZE = 8192: 7.20 secs
SIZE = 8193: 3.18 secs

编译器是GCC.
据我所知,这是因为内存管理,但我对这个主题并不太了解,这就是我在这里问的原因.

另外如何解决这个问题会很好,但如果有人能解释这些执行时间,我已经足够开心了.

我已经知道malloc / free了,但问题不在于使用的内存量,它只是执行时间,所以我不知道这会有多大帮助.