由于堆栈内存按使用顺序写入,因此它自然具有很多缓存友好性。但是,如果我从存储在堆上的大型数组中查询数据,我是否有更多机会获得缓存未命中?
因此,每次我需要读取或写入时,将数据切割成较小的数组并将它们从堆复制到堆栈是不是最好的做法,而不是查询位于堆上的内存段?
如果我必须经常读/写数据数组并且可以设法使这些数组适合缓存,那么在处理数据时我不应该完全避免使用堆吗?
答案 0 :(得分:1)
我不确定为什么你认为堆栈会更加缓存友好。虽然堆内存不一定按“按顺序”分配,但如果分配大块RAM,它将完全连续。这是malloc
及其朋友realloc
和calloc
之类的内容保证的一部分。
如果您追求速度和效率,将阵列分配到一个位置并将其留在那里更有效,而不是来回复制它。 :)