确实使用自定义块分配器来分配放入数组中的指针解决现金丢失问题?

问题描述:

假设我们有一个类A,并且我有一个指向A对象的指针数组,当我遍历数组中的每个元素时,我可能会导致现金未命中,因为每个对象都在内存中的不同位置,并且它们不对齐在同一个程序块中,因为它是一个指向对象而不是实际对象的指针数组。确实使用自定义块分配器来分配放入数组中的指针解决现金丢失问题?

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

更多细节:

我将创建一个自定义的分配器,该分配器将ALLOC的内存足够大,以处理所有的对象块,后来当我ALLOC一个对象,这个分配器将选择块内的*空间每次尝试将所有对象放在一个接一个的位置,这样它们立即被加载到现金存储器并且会导致更少的现金缺失

+0

什么?我的意思是你的建议解决方案。 – gsamaras

+0

我将创建一个自定义分配器,此分配器将分配一块足够大的内存来处理所有对象,稍后当我分配一个对象时,此分配器将选择该块内的空闲空间,每次尝试使所有对象放置一个下一个到另一个,这样他们立即被加载到现金记忆,并会导致更少的现金错过 –

当您通过第一个指针访问第一个对象时,指针将被提取到缓存中,然后是几个对象。

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

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

+0

好!我真的有使用指针,因为对象具有允许被覆盖的虚拟函数,除了对象将具有不同的大小(相同的基类)...(分配器可以处理这个) –

+0

我正在等待另一个,仍然,不要担心好友,我永远不会忘记,我会接受最好的答案;),请尝试通过添加对信息起源的引用来改进它,并删除'可能'使事情确定,因为我知道这很可能 –