gpt4 book ai didi

c++ - 囤积内存分配器

转载 作者:搜寻专家 更新时间:2023-10-31 01:16:19 26 4
gpt4 key购买 nike

Hoard memory allocator

我正在阅读有关 Hoard 内存分配器的论文,一切都可以理解,但有一件事不是,它如何减少多线程分配或释放内存时引起的堆争用,避免内存可能引入的错误共享分配器,同时,它对碎片应用严格的界限。他们是如何实现的?

enter image description here

最佳答案

根据论文,Hoard 根据每个处理器堆 的要求在 super block 内部分配内存。当这些堆需要一个 super block 时,它们会向全局堆请求一个空 block 。由于 super block 完全由每个处理器堆释放,因此它们被释放到全局堆以在其他地方重用,从而限制了分配的内存。

就线程争用而言, super block 一次仅在每个处理器堆中主动使用。然后 Hoard 只为 从一个 super block 到一个线程的内存提供服务。使用此策略 Hoard 能够避免最活跃的虚假共享:

When multiple threads make simultaneous requests for memory, the requests will always be satisfied from different superblocks, avoiding actively induced false sharing.

当 super block 变得相对空(由内部因素决定)时,存在这样一种可能性,即它可用于另一个堆,这可能导致被动错误共享,因为另一个线程可能仍保留对 super block 的引用。然而,考虑到 super block 的大小,他们发现这在实践中并不常见:

Further, we have observed that in practice, superblocks released to the global heap are often completely empty, eliminating the possibility of false sharing.

Hoard 通过一种相当常见的分配器策略来处理碎片,该策略汇集常见的分配大小并合并释放的空间。

关于c++ - 囤积内存分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9204354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com