内存池:它们是否会改进大于缓存行大小的结构的缓存使用?

Sid*_*Bob 2 c++ caching

据我了解,如果对象小于缓存行大小,内存池应该提高通常一起访问的对象的缓存性能 - 因为相邻的对象可能会同时被提取到缓存中.

但是大于缓存行大小的对象呢?将这些数据汇集到同一内存区域有什么好处吗?

(假设分配/解除分配时间无关紧要,我担心它的访问权限......)

谢谢!

Ker*_* SB 6

使用池的一个重要原因是它们使分配方案比通用分配器简单得多.由于所有对象都具有相同的大小,因此没有碎片,您只需要维护一个空闲列表.对于新的分配,您尝试弹出空闲列表的顶部,或者如果列表为空,则增加高水印,完成.(您可以在池内存本身内的O(1)空间中实现空闲列表.)

但是,池的使用是高度环境化的,并且是否有任何好处在很大程度上取决于您的实际代码路径和分配要求.现代标准分配器已经非常好用许多短期固定大小的分配,所以你真的需要分析和检查.