使用自定义块分配器分配放在数组中的指针是否可以解决现金丢失问题?

does using a custom block allocator to allocate pointers put in array solve cash missing problems?

假设我们有一个 class A ,并且我们有一个指向 A 对象的指针数组,当我遍历该数组中的每个元素时,我可能会导致现金丢失因为每个对象都在内存中的不同位置,并且它们没有在同一个块中一个接一个地对齐,因为它是一个指向对象的指针数组,而不是实际对象的指针。

我想通过创建一个自定义分配器来解决这个问题,我用它来分配这些对象并将它们的指针放入数组中。分配器确保所有对象在内存中始终相邻,并在一个块中对齐。这是否解决了迭代数组时现金丢失的问题?

更多详情:

我将创建一个自定义分配器,该分配器将分配一块足够大的内存来处理所有对象,稍后当我分配一个对象时,该分配器将选择该块内的空闲 space 尝试每个是时候将所有对象一个接一个地放置了,这样它们会立即加载到现金内存中,从而减少现金丢失

当您通过第一个指针访问第一个对象时,确实会先将多个指针提取到缓存中,然后再提取多个对象。

因此,当您访问第二个指针时,它确实已经在缓存中,第二个对象也是如此。等等。

所以是的,这会有所帮助,但是您不能直接使用存储实际对象的内存块而不是指针吗?如果不是,请尝试重新评估您的设计。直接使用对象将最大化对象的数据局部性。