内存分配和首次访问
相对至强而言,协处理器的内存分配成本较高——因此尽可能重复使用已非配的内存是非常明智的。例如,如果某函数被重复调用(假设在循环内),并且该函数使用数组作为临时存储,尝试初次分配足够大的数组(所需的最大大小),并在后续调用中重复使用该数组:
static real *temp_array=0;
void foo(..) {
...
if (temp_array == 0) {
temp_array = my_malloc(MAX_SIZE);
}
... // use of temp_array
}
同时,请牢记在首次访问时 Linux 上的物理内存进行分配(而不是在 malloc-point)。因此,如果您的循环遍历访问已分配内存(但未访问)的数组,第一次迭代可能比其余迭代需要更长的时间。