多线程堆管理

2023-12-27

在 C/C++ 中,我可以在一个线程中分配内存并在另一个线程中删除它。然而,每当有人从堆请求内存时,堆分配器就需要遍历堆以找到大小合适的空闲区域。两个线程如何有效地访问同一个堆而不破坏堆? (这是通过锁定堆来完成的吗?)


一般来说,您不需要担心内存分配器的线程安全性。所有标准内存分配器(即 MacOS、Windows、Linux 等附带的内存分配器)都是线程安全的。锁是提供线程安全的标准方法,尽管可以编写仅使用原子操作而不是锁的内存分配器。

现在,这些内存分配器是否是一个完全不同的问题scale;也就是说,它们的性能是否独立于执行内存操作的线程数量?在大多数情况下,答案是否定的。他们要么放慢速度,要么可以消耗a lot更多内存。第一个在两个维度(速度和空间)上可扩展的分配器是Hoard http://www.hoard.org/(我写的); Mac OS X 分配器受到它的启发 - 并在文档中引用它 - 但 Hoard 更快。还有其他的,包括 Google 的 tcmalloc。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多线程堆管理 的相关文章

随机推荐