【发布时间】:2021-12-05 12:03:54
【问题描述】:
假设我现在使用代码创建了一个向量
double *a;
double b;
a = (double *)malloc(64*sizeof(double));
//Initialize a
for(int i = 0; i < 64; i++)
{
b += a[i];
}
我猜在计算 b 时,a[i] 将分别在缓存中为每个 i 传输,对吗?
那么使用double a[64] 而不是malloc 创建a 怎么样?整个数组会同时放入缓存吗?
提前致谢。
【问题讨论】:
-
应该没有区别,堆栈和堆分配都由连续的虚拟地址范围组成。
-
"整个数组会同时放入缓存吗?"缓存通常是根据内存访问来填充的。它对您的数组或这些数组的大小一无所知。不管你把它放在栈上还是堆上。
标签: c caching memory malloc vectorization