加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

内存 – 多线程堆管理

发布时间:2020-12-14 16:20:55 所属栏目:Java 来源:网络整理
导读:在C/C++中,我可以在一个线程中分配内存,并在另一个线程中删除它.然而,只要有人从堆中请求内存,堆分配器就需要走堆,找到适合大小的空闲区.两个线程如何有效地访问同一个堆,而不会破坏堆? (这是通过锁定堆吗?) 解决方法 一般来说,您不需要担心内存分配器的线
在C/C++中,我可以在一个线程中分配内存,并在另一个线程中删除它.然而,只要有人从堆中请求内存,堆分配器就需要走堆,找到适合大小的空闲区.两个线程如何有效地访问同一个堆,而不会破坏堆? (这是通过锁定堆吗?)

解决方法

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

现在这是一个完全不同的问题:这些内存分配器是否缩放;也就是说,它们的性能与执行内存操作的线程数无关?在大多数情况下,答案是否定的;他们要么放慢,要么消耗更多的记忆.第一个可扩展分配器(速度和空间)是Hoard(我写的); Mac OS X分配器的灵感来自于它 – 并将其引用到文档中 – 但是Hoard更快.还有其他的,包括Google的tcmalloc.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读