前端之家收集整理的这篇文章主要介绍了
内存 – 多线程堆管理,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在C/C++中,我可以在一个线程中分配内存,并在另一个线程中
删除它.然而,只要有人从堆中请求内存,堆分配器就需要走堆,找到适合大小的空闲区.两个线程如何有效地访问同一个堆,而不会破坏堆? (这是通过锁定堆吗?)
一般来说,您不需要担心内存分配器的线程安全性.所有标准内存分配器 – 即MacOS,
Windows,
Linux等附带的内存分配器 – 都是线程安全的.锁是提供线程安全性的标准方式,尽管可以编写仅使用原子操作而不是锁的内存分配器.
现在这是一个完全不同的问题:这些内存分配器是否缩放;也就是说,它们的性能与执行内存操作的线程数无关?在大多数情况下,答案是否定的;他们要么放慢,要么消耗更多的记忆.第一个可扩展分配器(速度和空间)是Hoard(我写的); Mac OS X分配器的灵感来自于它 – 并将其引用到文档中 – 但是Hoard更快.还有其他的,包括Google的tcmalloc.
原文链接:https://www.f2er.com/java/125754.html